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-запросы:
- Клиент-серверная архитектура — разделение интерфейса и хранения данных.
- Отсутствие состояния (stateless) — каждый запрос содержит всю необходимую информацию, сервер не хранит контекст между запросами.
- Кеширование — ответы должны помечаться как кешируемые или некешируемые.
- Единообразный интерфейс — ресурсы идентифицируются URI, представления передаются в стандартных форматах, клиент управляет состоянием через гипертекст.
- Слоистая система — клиент не знает, общается ли он напрямую с сервером или через промежуточные слои (балансировщики, шлюзы).
¶Примеры запросов
``` 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.