Ответ
Нет, не является. REST (Representational State Transfer) — это архитектурный стиль, а не протокол. Его принципы теоретически могут быть реализованы поверх любого подходящего протокола прикладного уровня.
Почему HTTP стал де-факто стандартом для REST:
- Идеальное соответствие принципам: HTTP — stateless (без состояния), имеет четкие методы (GET, POST, PUT, DELETE, PATCH), которые напрямую отображаются на операции CRUD (Create, Read, Update, Delete).
- Универсальность и инфраструктура: HTTP поддерживается везде (браузеры, серверы, мобильные приложения), имеет встроенные механизмы кэширования (заголовки Cache-Control), аутентификации и роутинга.
- Широкие инструменты: Существует огромная экосистема инструментов для разработки, тестирования и документирования 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? Да потому что это овердохуища удобно!
- Идеально ложится, как ключ в замок. HTTP сам по себе без состояния (stateless), у него есть чёткие команды: GET (посмотреть), POST (создать), PUT (полностью обновить), DELETE (удалить), PATCH (чутка подправить). Прям один в один в CRUD упирается. Красота, а не соответствие!
- Всё уже построено. Этот протокол везде: в браузерах, на серверах, в мобилках. Вся инфраструктура мировая под него заточена. Кэширование, аутентификация, роутинг — всё из коробки, не надо велосипедов изобретать.
- Инструментов — завались. Хочешь потестить 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. Потому что это стандарт де-факто, и это, блядь, работает как швейцарские часы. Всё остальное — либо академические извращения, либо очень специфичные случаи, где без этого реально никак.