REST API: архитектурный стиль веб-сервисов¶
REST API (RESTful API) — программный интерфейс, построенный в соответствии с архитектурным стилем REST (Representational State Transfer, «передача состояния представления»), который определяет правила взаимодействия клиентских и серверных приложений через сеть. В отличие от монолитных приложений, REST API разделяет данные и функции на отдельные ресурсы, доступ к которым осуществляется по единому адресу (URL) с использованием стандартных HTTP-методов. Такой подход позволяет разным программам обмениваться информацией независимо от языка программирования и операционной системы.
¶История возникновения
Термин REST ввёл в 2000 году американский учёный Рой Филдинг в своей докторской диссертации «Архитектурные стили и проектирование программного обеспечения сетевых архитектур» (University of California, Irvine). Филдинг, один из создателей протокола HTTP, описал набор принципов, на которых уже фактически строилась работа Всемирной паутины, и сформулировал их как самостоятельный архитектурный стиль.
До массового распространения REST веб-сервисы чаще строились на стандартах SOAP (Simple Object Access Protocol) — более тяжёлой технологии с XML-сообщениями и строгими схемами. К концу 2000-х годов REST вытеснил SOAP во многих областях благодаря простоте, прозрачности и опоре на стандартный HTTP.
¶Базовые принципы REST
Архитектурный стиль REST опирается на шесть ключевых ограничений:
- Клиент-серверная архитектура — разделение интерфейса пользователя и хранения данных.
- Отсутствие состояния (stateless) — каждый запрос от клиента должен содержать всю необходимую информацию; сервер не хранит контекст между запросами.
- Кэшируемость — ответы должны явно указывать, кэшируются ли они.
- Единый интерфейс — стандартные правила идентификации ресурсов, работы с представлениями и самодокументирования.
- Слоистая структура (layered system) — клиент не должен знать, общается ли он напрямую с сервером или через промежуточные слои (балансировщики, шлюзы).
- Кодирование по требованию (optional) — сервер может передавать исполняемый код клиенту (например, JavaScript), но это необязательное условие.
¶Ресурсы и адресация
Центральное понятие REST API — ресурс: любой объект или сущность, к которой обращается клиент (пользователь, товар, заказ, статья). Каждому ресурсу соответствует уникальный идентификатор — URL-адрес. Например:
https://api.example.com/users/42` — конкретный пользователь с идентификатором 42;https://api.example.com/users/42/orders` — заказы этого пользователя.
Адреса строятся иерархически, используются существительные (не глаголы), а действия выражаются HTTP-методами.
¶HTTP-методы
Для операций над ресурсами REST API использует стандартные методы HTTP:
| Метод | Назначение | Пример |
|---|---|---|
| GET | Получение данных | GET /users/42 |
| POST | Создание нового ресурса | POST /users |
| PUT | Полное обновление ресурса | PUT /users/42 |
| PATCH | Частичное обновление | PATCH /users/42 |
| DELETE | Удаление ресурса | DELETE /users/42 |
Соответствие методов операциям CRUD (Create, Read, Update, Delete) — одна из характерных черт RESTful-интерфейсов.
¶Форматы данных
REST API не привязан к конкретному формату, но наиболее распространён JSON (JavaScript Object Notation) — лёгкий текстовый формат обмена данными, поддерживаемый почти всеми языками программирования. Реже используются XML, YAML, Protocol Buffers. Формат передаётся в заголовке запроса Content-Type: application/json.
¶Коды ответов
Сервер сообщает клиенту о результате операции с помощью кодов HTTP:
200 OK— успешный запрос;201 Created— ресурс создан;204 No Content— операция выполнена, данных нет;400 Bad Request— ошибка в запросе;401 Unauthorized— нет авторизации;403 Forbidden— доступ запрещён;404 Not Found— ресурс не найден;500 Internal Server Error— внутренняя ошибка сервера.
¶Аутентификация и безопасность
Для идентификации клиентов в REST API применяются несколько механизмов:
- API-ключи — простые токены в заголовке запроса;
- OAuth 2.0 — стандарт авторизации с выдачей временных токенов доступа, активно используемый в социальных сетях и облачных сервисах;
- JWT (JSON Web Token) — подписанные токены, содержащие данные пользователя;
- Базовая HTTP-аутентификация — логин и пароль в заголовке (используется редко из-за низкой безопасности).
Для защиты канала связи применяется протокол HTTPS (TLS), шифрующий данные между клиентом и сервером.
¶Примеры использования
REST API стал стандартом де-факто для веб-разработки. Примеры публичных REST-интерфейсов:
- GitHub API — управление репозиториями, пользователями, организациями;
- OpenWeatherMap — получение данных о погоде;
- Yandex Geocoder API — геокодирование адресов;
- ВКонтакте API — работа с данными социальной сети.
В России REST-интерфейсы используются в государственных системах (например, Госуслуги), банковских сервисах, маркетплейсах и мобильных приложениях.
¶Документация
Для описания REST API применяются стандарты OpenAPI (ранее Swagger) — формат описания интерфейса в формате JSON или YAML, позволяющий автоматически генерировать документацию и клиентские библиотеки. Существуют также альтернативы: RAML, API Blueprint, GraphQL (который, впрочем, не относится к REST).
¶Альтернативы REST
- SOAP — более строгий протокол с XML-сообщениями, используется в банковских и государственных системах;
- GraphQL — язык запросов от Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ), позволяющий клиенту запрашивать ровно нужные данные;
- gRPC — высокопроизводительный RPC-протокол от Google на основе HTTP/2 и Protocol Buffers;
- WebSocket — для двустороннего обмена данными в реальном времени.
¶Значение
REST API стал фундаментом современной веб-архитектуры: микросервисы, мобильные приложения, интеграции между компаниями, открытое партнёрское взаимодействие — всё это строится на принципах REST. Простота протокола, опора на стандартный HTTP и широкая поддержка инструментов сделали его основным способом обмена данными в интернете.
¶Источники
- Филдинг Р. «Architectural Styles and the Design of Network-based Software Architectures», University of California, Irvine, 2000.
- Ричардсон Л., Амундсен М. «RESTful Web APIs», O'Reilly Media, 2013.
- Ричардсон Л., Руби С. «RESTful Web Services», O'Reilly Media, 2007.
- OpenAPI Specification — официальная спецификация OpenAPI Initiative.
