Что такое REST API: принципы работы и особенности
Что такое REST API и как он работает? Разбираем архитектурные принципы REST, особенности взаимодействия клиента и сервера, преимущества и ограничения.


REST API широко используется в современной веб-разработке и является важной частью взаимодействия между сервисами.
С ним сталкиваются при разработке веб сайтов, мобильных приложений и интеграции сторонних платформ.
В этой статье разберём, что означает REST API, в каких задачах он применяется, какие особенности имеет этот подход и почему он получил широкое распространение в разработке.
REST API это подтип Web API, спроектированный с опорой на архитектурный стиль REST.
Что такое API мы прежде рассмотрели в отдельной статье.
REST (Representational State Transfer) это архитектурный стиль проектирования распределённых систем, предложенный Роем Филдингом (Roy Fielding) в 2000 году, который ставит правила, как должны взаимодействовать компоненты системы.
REST не является протоколом, языком программирования или конкретной технологией.
Основная идея REST заключается в том, что данные и объекты системы представляются в виде ресурсов, а клиент (обращающаяся программа или разработчик) взаимодействует с ними через стандартизированный интерфейс.
Ресурс это сущность или объект, к которому API предоставляет доступ.
Например, ресурсом в REST API может быть:
пользователь
товар
заказ
категория товаров
статья
комментарий
Каждый ресурс имеет уникальный идентификатор, обычно представленный в виде URI (Uniform Resource Identifier) (простыми словами адрес).
Примеры адресов ресурсов:
/users получить всех пользователей списком
/users/15 получить конкретного пользователя с идентификатором 15
/products получить все заказы списком
/orders/100 получить конкретный заказ с идентификатором 100
REST определяет шесть основных архитектурных принципов.
Что такое клиент-серверная архитектура мы рассмотрели в отдельной статье.
Каждый запрос клиента должен содержать всю информацию, необходимую серверу для его обработки.
Сервер не должен полагаться на сохранённый контекст предыдущих запросов конкретного клиента.
Например, если для получения информации о пользователе требуется авторизация, клиент передаёт токен доступа в каждом запросе.
Это позволяет серверу обрабатывать запросы независимо друг от друга и упрощает масштабирование системы.
Stateless не означает отсутствие базы данных или сохранённых пользовательских данных.
Речь идёт только о состоянии взаимодействия между клиентом и сервером.
Ответы сервера должны явно определять, можно ли их кэшировать и на какой срок.
Кэширование позволяет использовать повторно ранее полученные данные, уменьшая количество запросов к серверу тем самым снижая нагрузку.
Например, список категорий товаров может кэшироваться, так как меняется редко.
Для управления кэшированием в HTTP используются заголовки, такие как:
Cache-Control
ETag
Expires
Last-Modified
Взаимодействие между клиентом и сервером должно происходить через единый стандартизированный интерфейс.
Это один из ключевых принципов REST. Он включает четыре ограничения:
Идентификация ресурсов
Каждый ресурс имеет свой идентификатор.
Манипулирование ресурсами через представления
Клиент получает представление ресурса и использует его для взаимодействия с ним.
Самоописываемые сообщения
Содержат достаточно информации для понимания способа их обработки.
HATEOAS
Клиент может находить доступные действия через ссылки, предоставляемые сервером.
Архитектура может состоять из нескольких уровней, каждый из которых выполняет определённые функции.
Например, между клиентом и основным сервером могут находиться:
балансировщик нагрузки
API Gateway (единая точка входа)
прокси-сервер
система кэширования
сервис аутентификации
Клиенту не требуется знать, с каким именно компонентом системы он взаимодействует, что позволяет строить масштабируемые и распределённые приложения.
REST допускает возможность передачи исполняемого кода от сервера клиенту.
Например, сервер может передать JavaScript, который будет выполнен в браузере.
Это необязательное архитектурное ограничение REST.
REST API обычно работает поверх протокола HTTP.
Клиент отправляет HTTP-запрос к определённому ресурсу, а сервер обрабатывает запрос и возвращает HTTP-ответ.
Рассмотрим пример получения информации о пользователе.
Клиент отправляет запрос:
GET /users/15 HTTP/1.1
Host: api.example.com
Accept: application/jsonпример запроса REST API
Сервер возвращает ответ:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 15,
"name": "Иван",
"email": "ivan@example.com"
}пример ответа HTTP для REST API
Мы видим в этом примере:
GET это HTTP-метод, указывающий на потребность получить данные
/users/15 это адрес ресурса
200 OK это код состояния HTTP, означающий успешную обработку запроса
Content-Type это заголовок, определяющий формат возвращаемых данных
JSON это формат получаемых данных
Таким образом, REST определяет архитектурные принципы взаимодействия, а HTTP предоставляет механизм передачи запросов и ответов.
REST теоретически может быть реализован и поверх другого протокола.
Основные преимущества REST API:
Простота взаимодействия
Используются распространённые механизмы HTTP.
Независимость клиента и сервера
Клиент и сервер могут разрабатываться и изменяться независимо друг от друга.
Масштабируемость
Архитектурные принципы позволяют распределять нагрузку между компонентами системы.
Кэширование
Повторное использование ответов позволяет снизить нагрузку на сервер.
Универсальность
REST API может использоваться веб-приложениями, мобильными приложениями и другими системами.
Поддержка различных форматов данных
Наиболее распространён JSON, но могут использоваться и другие форматы.
Несмотря на популярность, REST API имеет и определённые ограничения:
Количество запросов
Для получения связанных данных клиенту иногда приходится отправлять несколько запросов.
Избыточность данных
Сервер может возвращать больше информации, чем требуется клиенту.
Зависимость от структуры ресурсов
Изменение структуры API может потребовать изменений на стороне клиента.
Отсутствие состояния взаимодействия
Сервер не хранит контекст предыдущих запросов клиента, поэтому необходимая информация должна передаваться в каждом запросе.
Необходимость проектирования API
Для создания удобного интерфейса важно правильно определить ресурсы, URI и способы взаимодействия с ними.
Термины REST API и RESTful API часто используются как синонимы.
Однако между ними есть небольшое отличие:
REST API это API, которое использует или ориентируется на архитектурный стиль REST.
RESTful API это API, которое соответствует архитектурным ограничениям REST.
На практике термин REST API часто используется для обозначения HTTP API, построенного вокруг ресурсов и стандартных HTTP-методов.
При этом не каждое HTTP API является REST API.
Например, API, в котором все операции выполняются через один endpoint (адрес) с передачей названия действия в теле POST-запроса, не обязательно соответствует принципам REST.
Если у вас остались вопросы по поводу REST API, можете обратиться за консультацией к программисту.





