REST API

REST (Representational State Transfer) – это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Архитектурный стиль – это набор согласованных ограничений и принципов проектирования, позволяющий добиться определённых свойств системы.

Принципы REST API

  1. Клиент-серверная архитектура.

  2. Stateless. В противовес Stateful, сервер не хранит у себя информацию о сессии с клиентом и о его предыдущих обращениях. В каждом запросе сервер получает всю необходимую информацию для обработки.

  3. Кэширование.

  4. Единообразие интерфейса (HATEOAS). Сервер возвращает не только ресурс, но также его связи с другими ресурсами и действия, которые можно с ним совершить.

  5. Layered system (слоистая система). Ни клиент, ни сервер не должны знать о том, как происходит цепочка вызовов дальше своих прямых соседей.

  6. Code on demand (код по запросу). В ответ на запрос клиента сервер передаёт исполняемый код (программу), который может быть выполнен на его, клиента, стороне.

Уровни зрелости REST API

  • Уровень 0. API использует протокол HTTP и любой формат передачи данных, все запросы идут к одному URL и через один метод.

  • Уровень 1. Запросы идут к разным URL, но по-прежнему используют один метод.

  • Уровень 2. Запросы идут к разным URL и используют разные методы.

  • Уровень 3. Реализована концепция HATEOAS.

Проектирование REST API

  1. Определите, какие объекты на сервере доступны клиенту.

  2. Назначьте URL-адреса этим объектам. По общему правилу, каждому объекту назначается два адреса:

  • название объекта во множественном числе (/orders);

  • название ресурса во множественном числе + уникальный идентификатор одного ресурса (/orders/<order_id>).

Эти адреса называются endpoints (конечные точки), к ним клиент отправляет запросы.

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

  2. Определите, какими данными могут обмениваться клиент и сервер (допустимый формат данных, headers, body).

Связывать объекты в запросах можно разными способами, например:

Типы интеграций

  1. Интеграция, управляемая клиентом. Пользователь нажимает кнопку в приложении – клиент отправляет запрос серверу.

  2. Интеграция, управляемая сервером:

  • Polling (опрос). Клиент с заданной периодичностью оправляет серверу один и тот же запрос. В ответе сервер уведомляет клиента о состоянии ресурса.

  • Long polling (долгий опрос). Клиент отправляет серверу запрос, а сервер отвечает тогда, когда что-то изменится.

  • Webhook (вебхук). В запросе клиента содержится Callback URL (URL обратного вызова). Когда что-то изменится, сервер посылает запрос на Callback URL.

Last updated