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

REST-архитектура

REST (от англ. Representational State Transfer — «передача репрезентативного состояния») — это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. REST представляет собой набор согласованных ограничений (констрейнтов), которые определяют, как сервер и клиент обмениваются данными, как идентифицируются ресурсы и как управляется состояние сессии. В отличие от протокола или стандарта, REST является парадигмой проектирования веб-сервисов, наиболее известной реализацией которой являются API, работающие поверх протокола HTTP. Основополагающий принцип REST — каждый элемент системы (документ, изображение, запись в базе данных) рассматривается как ресурс, имеющий уникальный идентификатор (URI), а манипуляции с ним осуществляются через стандартные методы протокола (например, GET, POST, PUT, DELETE). Архитектура REST была сформулирована Роем Филдингом в его докторской диссертации в 2000 году и с тех пор стала доминирующим подходом для построения публичных и внутренних API в веб-разработке.

История возникновения

Концепция REST возникла как результат анализа эволюции Всемирной паутины (World Wide Web). В середине 1990-х годов Рой Филдинг, один из главных авторов спецификаций HTTP/1.0 и HTTP/1.1, а также соавтор протокола URI, начал систематизировать принципы, которые сделали Web масштабируемой и устойчивой распределённой системой.

В 2000 году в своей диссертации «Architectural Styles and the Design of Network-based Software Architectures» Филдинг ввёл термин REST и описал его как набор архитектурных ограничений. Он противопоставил REST более ранним подходам, таким как RPC (Remote Procedure Call), которые требовали жёсткой привязки к конкретным методам и протоколам. Филдинг показал, что именно соблюдение принципов REST (кэширование, единообразие интерфейса, отсутствие состояния на сервере) позволило Web расти до глобальных масштабов.

После публикации диссертации REST постепенно начал вытеснять SOAP (Simple Object Access Protocol) и другие протоколы в сфере веб-сервисов. К середине 2000-х годов крупные компании, такие как Amazon, eBay и Flickr, начали предоставлять публичные RESTful API. Это способствовало популяризации архитектуры, и к 2010-м годам REST стал стандартом де-факто для проектирования API в веб-разработке.

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

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

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

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

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

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

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

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

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

Это ключевое ограничение, отличающее REST от других стилей. Оно состоит из четырёх подограничений:

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

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

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

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

Методы HTTP в REST

RESTful API активно использует стандартные методы HTTP для выполнения CRUD-операций (Create, Read, Update, Delete) над ресурсами:

Метод HTTPДействиеПример для ресурса /users/123
GETПолучить представление ресурсаGET /users/123 — возвращает данные пользователя
POSTСоздать новый ресурсPOST /users — создаёт нового пользователя, данные в теле запроса
PUTПолностью заменить ресурсPUT /users/123 — заменяет все поля пользователя
PATCHЧастично обновить ресурсPATCH /users/123 — обновляет только переданные поля
DELETEУдалить ресурсDELETE /users/123 — удаляет пользователя

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

Ресурсы и URI

В REST ресурсы представляют собой любые сущности предметной области: пользователи, заказы, товары, статьи. Ресурсы идентифицируются с помощью URI (Uniform Resource Identifier). Хороший RESTful API использует существительные во множественном числе для коллекций и иерархические пути:

Важно, что URI не должны содержать глаголов (например, /getUser или /createOrder), так как действие определяется методом HTTP.

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

Сервер может возвращать ресурс в различных форматах (представлениях). Наиболее распространённые форматы:

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

Примеры RESTful API

REST-архитектура используется повсеместно. Крупные примеры:

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

Несмотря на широкое распространение, REST не лишён недостатков. Основные претензии:

Альтернативами REST являются:

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

REST-архитектура широко применяется в российской IT-индустрии. Государственные информационные системы (ГИС), такие как портал «Госуслуги», используют RESTful API для взаимодействия с банками, ведомствами и мобильными приложениями. Крупные российские компании (Сбер, Яндекс, VK, Т-Банк) предоставляют REST API для разработчиков. Внутренние системы предприятий также строятся на REST, особенно в микросервисной архитектуре. При проектировании REST API в России часто руководствуются методическими рекомендациями Минцифры и стандартами OpenAPI.

Источники

  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.
  3. Richardson, L., & Ruby, S. (2007). «RESTful Web Services». O'Reilly Media.
  4. Masse, M. (2011). «REST API Design Rulebook». O'Reilly Media.
  5. Спецификация HTTP/1.1 (RFC 7230-7235). Internet Engineering Task Force.
  6. OpenAPI Specification (версия 3.0). OpenAPI Initiative, Linux Foundation.

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

На главную BFOmetr →