Открыть сервисСервис

REST-запросы: HTTP-методы и архитектура

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

История

Термин REST ввёл Рой Филдинг в 2000 году в своей докторской диссертации «Architectural Styles and the Design of Network-based Software Architectures», написанной в Калифорнийском университете в Ирвайне. Филдинг сформулировал REST как набор архитектурных ограничений, выведенных из практики работы Всемирной паутины: HTTP, URI и HTML были проанализированы как пример успешного распределённого взаимодействия.

До REST для интеграции систем широко использовались RPC (удалённый вызов процедур) и протоколы вроде SOAP. REST предложил более простую модель, основанную на ресурсах и стандартных HTTP-методах, что упростило разработку и масштабирование веб-сервисов.

HTTP-методы

REST-запросы используют стандартные HTTP-методы (verbs), каждый из которых соответствует определённому типу операции над ресурсом:

МетодНазначениеИдемпотентностьТело запроса
GETПолучение представления ресурсаДаНет
POSTСоздание нового ресурса или выполнение операцииНетЕсть
PUTПолное замещение ресурсаДаЕсть
PATCHЧастичное изменение ресурсаДаЕсть
DELETEУдаление ресурсаДаОбычно нет
HEADПолучение заголовков ресурса без телаДаНет
OPTIONSПолучение поддерживаемых методов ресурсаДаНет

Идемпотентность означает, что повторное выполнение запроса приводит к тому же состоянию сервера, что и однократное выполнение. Например, повторный DELETE удаляет ресурс один раз, а повторный POST может создать несколько копий.

Структура запроса

Типичный REST-запрос состоит из нескольких частей:

  • Метод — HTTP-верб, определяющий тип операции.
  • URI (Uniform Resource Identifier) — адрес ресурса, например /api/users/42.
  • Заголовки (headers) — метаданные запроса: тип контента (Content-Type), авторизация (Authorization), язык (Accept-Language) и другие.
  • Тело запроса (body) — данные в формате JSON, XML или другом, передаваемые с методами POST, PUT, PATCH.
  • Параметры строки запроса (query string) — фильтры, пагинация, сортировка: /api/users?role=admin&page=2.

Ответ сервера содержит код статуса HTTP, заголовки и, как правило, тело с данными в JSON или XML.

Коды ответов

Коды статуса HTTP группируются по диапазонам:

  • 2xx — успех: 200 OK, 201 Created, 204 No Content.
  • 3xx — перенаправление: 301 Moved Permanently, 304 Not Modified.
  • 4xx — ошибка клиента: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 409 Conflict, 422 Unprocessable Entity.
  • 5xx — ошибка сервера: 500 Internal Server Error, 503 Service Unavailable.

Принципы REST

Филдинг сформулировал несколько архитектурных ограничений, определяющих корректные REST-запросы:

  1. Клиент-серверная архитектура — разделение интерфейса и хранения данных.
  2. Отсутствие состояния (stateless) — каждый запрос содержит всю необходимую информацию, сервер не хранит контекст между запросами.
  3. Кеширование — ответы должны помечаться как кешируемые или некешируемые.
  4. Единообразный интерфейс — ресурсы идентифицируются URI, представления передаются в стандартных форматах, клиент управляет состоянием через гипертекст.
  5. Слоистая система — клиент не знает, общается ли он напрямую с сервером или через промежуточные слои (балансировщики, шлюзы).

Примеры запросов

``` GET /api/articles/10 HTTP/1.1 Host: example.com Accept: application/json

POST /api/articles HTTP/1.1 Content-Type: application/json

{"title": "Новая статья", "body": "Текст"}

DELETE /api/articles/10 HTTP/1.1 ```

Применение

REST-запросы используются в публичных API: GitHub, Яндекс, VK, Госуслуги и другие сервисы предоставляют REST-интерфейсы. В России разработка REST-сервисов ведётся в рамках цифровых платформ и государственных информационных систем. Наиболее распространённый формат данных — JSON, хотя поддерживается и XML.

Источники

  • Филдинг Р. Architectural Styles and the Design of Network-based Software Architectures. — UC Irvine, 2000.
  • Ричардсон Л., Амундсен М. RESTful Web APIs. — O'Reilly Media, 2013.
  • Филдинг Р., Тейлор Р. Principled Design of the Modern Web Architecture. — ACM, 2002.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru