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

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 опирается на шесть ключевых ограничений:

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

Ресурсы и адресация

Центральное понятие REST API — ресурс: любой объект или сущность, к которой обращается клиент (пользователь, товар, заказ, статья). Каждому ресурсу соответствует уникальный идентификатор — URL-адрес. Например:

Адреса строятся иерархически, используются существительные (не глаголы), а действия выражаются 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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru