Является ли работа по HTTP обязательным условием для REST API?

Ответ

Нет, не является. REST (Representational State Transfer) — это архитектурный стиль, а не протокол. Его принципы теоретически могут быть реализованы поверх любого подходящего протокола прикладного уровня.

Почему HTTP стал де-факто стандартом для REST:

  1. Идеальное соответствие принципам: HTTP — stateless (без состояния), имеет четкие методы (GET, POST, PUT, DELETE, PATCH), которые напрямую отображаются на операции CRUD (Create, Read, Update, Delete).
  2. Универсальность и инфраструктура: HTTP поддерживается везде (браузеры, серверы, мобильные приложения), имеет встроенные механизмы кэширования (заголовки Cache-Control), аутентификации и роутинга.
  3. Широкие инструменты: Существует огромная экосистема инструментов для разработки, тестирования и документирования HTTP-API.

Пример RESTful-подхода поверх HTTP:

// Получение ресурса (Read) - GET
$userData = file_get_contents('https://api.example.com/users/123');
// Создание ресурса (Create) - POST
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/json',
        'content' => json_encode(['name' => 'Alice'])
    ]
]);
$response = file_get_contents('https://api.example.com/users', false, $context);

Теоретическая альтернатива: Можно представить RESTful-сервис, использующий протокол CoAP (для IoT-устройств) или даже FTP, где операции GET (скачать), PUT (загрузить), DELETE (удалить) также существуют. Однако на практике, говоря "REST API", почти всегда подразумевают реализацию поверх HTTP/HTTPS, так как это наиболее практичный и стандартизированный способ.

Ответ 18+ 🔞

А, ну вот опять народ путает, блядь, базовые понятия! Смотри, объясняю на пальцах, чтобы даже мартышлюшка поняла.

Нет, ёпта, не является. REST — это, грубо говоря, архитектурный стиль, свод правил, как делать API удобным и предсказуемым. Это не протокол, типа как TCP или HTTP. Это как рецепт борща — можно на газовой плите варить, можно на электрической, а можно, если совсем ебанько, на костре. Так и REST — его принципы можно, теоретически, натянуть на любой подходящий протокол.

А теперь, почему все REST-сервисы — это почти всегда HTTP? Да потому что это овердохуища удобно!

  1. Идеально ложится, как ключ в замок. HTTP сам по себе без состояния (stateless), у него есть чёткие команды: GET (посмотреть), POST (создать), PUT (полностью обновить), DELETE (удалить), PATCH (чутка подправить). Прям один в один в CRUD упирается. Красота, а не соответствие!
  2. Всё уже построено. Этот протокол везде: в браузерах, на серверах, в мобилках. Вся инфраструктура мировая под него заточена. Кэширование, аутентификация, роутинг — всё из коробки, не надо велосипедов изобретать.
  3. Инструментов — завались. Хочешь потестить API? Вот тебе Postman. Документацию сгенерить? Вот Swagger. Отладчик в браузере. Всё уже есть, не надо страдать хуйнёй.

Вот смотри, как это на PHP выглядит, простейший пример:

// Получить пользователя (Read) - это же чистый GET, блядь
$userData = file_get_contents('https://api.example.com/users/123');

// Создать нового (Create) - вот тебе POST, на блюдечке
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/json',
        'content' => json_encode(['name' => 'Alice'])
    ]
]);
$response = file_get_contents('https://api.example.com/users', false, $context);

Видишь? Всё по канону. URL — это ресурс (/users/123), метод HTTP — это действие. Элегантно, сука, и понятно.

Теоретически, да, можно и на другом. Можно представить себе RESTful-сервис для умных лампочек на CoAP (это такой облегчённый HTTP для IoT). Или, ёперный театр, даже на FTP! Ну типа: GET (скачать файл), PUT (залить файл), DELETE (удалить файл). Технически — да, это передача состояния представления ресурса (файла). Но это будет пиздопроебибна с точки зрения удобства и инструментов.

Так что запомни раз и навсегда: когда кто-то говорит "REST API", в 99.9% случаев он имеет в виду REST поверх HTTP. Потому что это стандарт де-факто, и это, блядь, работает как швейцарские часы. Всё остальное — либо академические извращения, либо очень специфичные случаи, где без этого реально никак.