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

RESTful API

RESTful API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия компонентов распределённого приложения в сети, основанный на наборе принципов и ограничений, определяющих, как клиентские и серверные приложения обмениваются данными. REST (сокр. от англ. Representational State Transfer, «передача репрезентативного состояния») был предложен в 2000 году Роем Филдингом (Roy Fielding) в его докторской диссертации как альтернатива более сложным протоколам, таким как SOAP. RESTful API использует протокол HTTP в качестве транспортного уровня и оперирует с ресурсами, представленными в форматах JSON, XML, HTML или других.

Основные принципы и ограничения

Архитектура REST основана на шести ключевых ограничениях (constraints), которые отличают её от других подходов к построению API:

Клиент-серверная архитектура (Client-Server)

Система разделяется на две части: клиент (пользовательский интерфейс) и сервер (хранилище данных и бизнес-логика). Клиент не заботится о хранении данных, а сервер — о пользовательском интерфейсе. Это позволяет разрабатывать и масштабировать компоненты независимо.

Отсутствие состояния (Stateless)

Каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для его обработки. Сервер не хранит никакой информации о состоянии клиента между запросами (сессионные данные). Это повышает надёжность и масштабируемость, но требует передачи аутентификационных токенов или других данных при каждом запросе.

Кэширование (Cacheability)

Ответы сервера должны явно указывать, могут ли они быть кэшированы клиентом или промежуточными прокси-серверами. Правильное кэширование снижает нагрузку на сервер и уменьшает задержки.

Единообразие интерфейса (Uniform Interface)

Фундаментальное ограничение, упрощающее архитектуру. Включает четыре подпринципа:

Многоуровневая система (Layered System)

Архитектура может состоять из нескольких иерархических слоёв (балансировщики нагрузки, прокси-серверы, шлюзы). Каждый слой взаимодействует только с соседними, что повышает масштабируемость и безопасность.

Код по требованию (Code on Demand, опционально)

Сервер может временно расширять функциональность клиента, передавая исполняемый код (например, JavaScript-скрипты). Это единственное опциональное ограничение.

HTTP-методы и работа с ресурсами

RESTful API использует стандартные HTTP-методы для выполнения операций над ресурсами. Каждый метод имеет определённую семантику:

HTTP-методОперацияИдемпотентностьБезопасность
GETПолучение ресурса или списка ресурсовДаДа
POSTСоздание нового ресурса или выполнение действияНетНет
PUTПолная замена ресурса (или создание, если ресурс не существует)ДаНет
PATCHЧастичное обновление ресурсаНет (обычно)Нет
DELETEУдаление ресурсаДаНет

Идемпотентность означает, что повторное выполнение одного и того же запроса приводит к тому же состоянию сервера (например, повторный DELETE не вызовет ошибку, а просто вернёт 404). Безопасность — метод не изменяет состояние сервера.

Примеры URI и методов

Форматы представления данных

Наиболее распространённые форматы для обмена данными в RESTful API:

Клиент указывает желаемый формат через HTTP-заголовок Accept, сервер — через Content-Type.

Статус-коды HTTP

RESTful API использует стандартные HTTP-статус-коды для информирования клиента о результате запроса. Основные группы:

Версионирование API

По мере развития API его интерфейс может меняться. Чтобы не нарушать работу старых клиентов, применяют версионирование. Основные подходы:

Наиболее распространённый и простой способ — версионирование через URI.

Аутентификация и авторизация

RESTful API часто требует идентификации клиента. Основные методы:

  • Basic Auth — передача имени пользователя и пароля в заголовке Authorization (небезопасно без HTTPS).
  • API-ключи — статический ключ, передаваемый в заголовке или параметре запроса.
  • Bearer Token (JWT) — токен, выдаваемый после аутентификации, передаётся в заголовке Authorization: Bearer <token>. JWT (JSON Web Token) содержит утверждения о пользователе и подписан сервером.
  • OAuth 2.0 — протокол делегированного доступа, позволяющий сторонним приложениям получать ограниченный доступ к ресурсам от имени пользователя без передачи его пароля.

Преимущества и недостатки

Преимущества

  • Простота и понятность — основан на стандартных HTTP-методах и кодах.
  • Масштабируемость — отсутствие состояния и кэширование позволяют легко наращивать серверные мощности.
  • Независимость клиента и сервера — клиенты могут быть написаны на любом языке, поддерживающем HTTP.
  • Широкая поддержка — все современные языки и платформы имеют встроенные или библиотечные средства для работы с HTTP и JSON.
  • Кэширование — снижает нагрузку и ускоряет ответы.

Недостатки

  • Избыточность данных — часто возвращается больше данных, чем нужно клиенту (проблема решается через GraphQL или частичные ответы).
  • Сложность с множественными запросами — для получения связанных данных может потребоваться несколько запросов (N+1 problem).
  • Ограниченность HATEOAS — на практике большинство API не реализуют гипермедиа полностью, что снижает самодокументируемость.
  • Отсутствие строгой спецификации — REST — это стиль, а не стандарт, что приводит к разночтениям в реализации.

Пример реализации (упрощённый)

Запрос на создание пользователя:

``` POST /api/users HTTP/1.1 Host: example.com Content-Type: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

{ "name": "Иван Петров", "email": "ivan@example.com", "password": "securePassword123" } ```

Ответ:

``` HTTP/1.1 201 Created Content-Type: application/json Location: /api/users/42

{ "id": 42, "name": "Иван Петров", "email": "ivan@example.com", "createdAt": "2024-01-15T10:30:00Z" } ```

RESTful API и GraphQL

GraphQL (разработан Facebook в 2015 году) является альтернативой RESTful API. В отличие от REST, где сервер определяет структуру ответа, GraphQL позволяет клиенту запрашивать только нужные поля и агрегировать данные из нескольких ресурсов в одном запросе. REST остаётся более простым и зрелым решением для большинства типовых задач, в то время как GraphQL лучше подходит для сложных, быстро меняющихся интерфейсов с множеством взаимосвязей.

Применение в России

В России RESTful API активно используется в государственных информационных системах (например, портал «Госуслуги», Единая система идентификации и аутентификации — ЕСИА), в банковском секторе (Сбербанк, Т-Банк, ВТБ) и в коммерческих сервисах (Яндекс, Ozon, Wildberries). Российские разработчики следуют тем же принципам, что и международное сообщество, с учётом требований законодательства о персональных данных (ФЗ-152).

Источники

  • Fielding, R. T. (2000). Architectural Styles and the Design of Network-based Software Architectures (докторская диссертация, Калифорнийский университет в Ирвайне).
  • Richardson, L., & Ruby, S. (2007). RESTful Web Services. O'Reilly Media.
  • Masse, M. (2011). REST API Design Rulebook. O'Reilly Media.
  • Документация по HTTP-протоколу (RFC 7230-7235).
  • Статьи и руководства по RESTful API на ресурсах MDN Web Docs, IBM Developer и Microsoft Docs.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →