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

REST API

REST API (от англ. Representational State Transfer — «передача репрезентативного состояния») — это архитектурный стиль взаимодействия компонентов распределённого приложения в сети, при котором запросы и ответы строятся на основе стандартных протоколов, в первую очередь HTTP. В отличие от протоколов или библиотек, REST является набором принципов и ограничений, которые позволяют создавать масштабируемые, надёжные и производительные веб-сервисы. Системы, соответствующие этим принципам, называются RESTful-сервисами.

История и происхождение

Концепция REST была впервые сформулирована в 2000 году в докторской диссертации Роя Филдинга (Roy Fielding), одного из создателей протокола HTTP и спецификации URI. Филдинг проанализировал архитектуру Всемирной паутины и выделил ключевые принципы, которые обеспечивают её устойчивость и масштабируемость. Он предложил использовать эти принципы для проектирования веб-сервисов, что стало альтернативой более сложным и тяжёлым подходам, таким как SOAP (Simple Object Access Protocol).

На протяжении 2000-х годов REST-подход постепенно набирал популярность благодаря своей простоте и естественной интеграции с веб-технологиями. Крупные компании, такие как Amazon, Twitter и Flickr, начали публиковать RESTful API для своих сервисов, что способствовало стандартизации и распространению подхода. К середине 2010-х годов REST стал доминирующим стилем для создания публичных и внутренних API, вытеснив SOAP во многих областях.

Основные принципы REST

Рой Филдинг определил шесть архитектурных ограничений (constraints), которым должна соответствовать система, чтобы считаться RESTful:

  1. Клиент-серверная архитектура (Client-Server). Интерфейс пользователя (клиент) отделён от хранилища данных (сервер). Это повышает переносимость клиентского кода и упрощает масштабирование серверной части.
  2. Отсутствие состояния (Stateless). Каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для его обработки. Сервер не хранит никаких данных о состоянии клиента между запросами. Сессионные данные (например, аутентификация) передаются в каждом запросе. Это упрощает сервер и повышает его надёжность.
  3. Кэширование (Cacheable). Ответы сервера должны явно или неявно указывать, можно ли их кэшировать. Если клиент или промежуточный прокси-сервер кэширует ответ, это позволяет избежать повторных запросов и снижает нагрузку на сервер.
  4. Единообразие интерфейса (Uniform Interface). Это ключевое ограничение, которое отличает REST от других архитектур. Оно включает четыре подпринципа:
  1. Многоуровневая система (Layered System). Архитектура может состоять из нескольких уровней (например, балансировщики нагрузки, прокси-серверы, кэши). Клиент обычно не знает, взаимодействует ли он напрямую с конечным сервером или с промежуточным узлом.
  2. Код по требованию (Code on Demand) — опционально. Сервер может временно расширять функциональность клиента, передавая ему исполняемый код (например, JavaScript-скрипты). Это единственное необязательное ограничение.

Ресурсы и методы HTTP

В RESTful API каждый ресурс (например, пользователь, статья, товар) представлен отдельным URI. Операции над ресурсами выполняются с помощью стандартных методов HTTP:

HTTP-методДействиеПример (для ресурса /articles)
GETПолучение ресурса или списка ресурсовGET /articles — получить все статьи; GET /articles/5 — получить статью с ID=5
POSTСоздание нового ресурсаPOST /articles — создать новую статью (данные передаются в теле запроса)
PUTПолная замена существующего ресурсаPUT /articles/5 — полностью заменить статью с ID=5
PATCHЧастичное обновление ресурсаPATCH /articles/5 — обновить только заголовок статьи с ID=5
DELETEУдаление ресурсаDELETE /articles/5 — удалить статью с ID=5

Идемпотентность методов означает, что повторный вызов одного и того же запроса приводит к тому же состоянию сервера. GET, PUT, DELETE идемпотентны; POST — нет (каждый вызов создаёт новый ресурс). PATCH может быть как идемпотентным, так и нет, в зависимости от реализации.

Форматы данных и коды ответов

Наиболее распространённым форматом представления данных в REST API является JSON (JavaScript Object Notation). Он лёгок, читаем и хорошо поддерживается всеми языками программирования. Реже используется XML, особенно в унаследованных системах.

Коды состояния HTTP (Status Codes) в REST API несут смысловую нагрузку и информируют клиента о результате запроса:

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

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

Недостатки

Применение

REST API является основой для большинства современных веб-сервисов и мобильных приложений. Он используется в:

Критика и альтернативы

Несмотря на широкое распространение, REST API подвергается критике за отсутствие строгой типизации и избыточность данных. Основными альтернативами являются:

Выбор между REST, GraphQL и gRPC зависит от конкретных требований проекта: сложности данных, производительности, необходимости строгой типизации и опыта команды.

Источники

  1. Fielding, R. T. (2000). Architectural Styles and the Design of Network-based Software Architectures (Doctoral dissertation). University of California, Irvine.
  2. Fielding, R. T., & Taylor, R. N. (2002). Principled design of the modern Web architecture. ACM Transactions on Internet Technology (TOIT), 2(2), 115-150.
  3. Richardson, L., & Ruby, S. (2007). RESTful Web Services. O'Reilly Media.
  4. Fowler, M. (2010). Richardson Maturity Model. martinfowler.com.
  5. Masse, M. (2011). REST API Design Rulebook. O'Reilly Media.

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

На главную BFOmetr →