Pepelen
← Системный анализ: API, интеграции и данные

Урок

HTTP-запрос и REST-ресурсы глазами проектировщика

Разобрать HTTP-запрос и ответ на части и спроектировать адреса REST-ресурсов кейса: существительные во множественном числе, иерархия, параметры пути и запроса.

1 / 7

Запрос, ответ и ресурсы

Запрос, ответ и ресурсы

Повторение из курса по тестированию: HTTP-запрос состоит из метода, адреса (URI: путь и параметры запроса), заголовков и тела, ответ — из кода статуса, заголовков и тела. HTTP не помнит прошлых запросов (stateless): каждый запрос несёт всё нужное серверу, включая токен. REST — архитектурный стиль (Рой Филдинг, 2000), а не формат данных: у каждого ресурса свой адрес, у методов один смысл для всех ресурсов (единый интерфейс), сервер не хранит состояние диалога, ответы могут кэшироваться. Данные идут в JSON, XML или другом формате. «REST = JSON» — заблуждение: JSON просто встречается чаще. Правила адресов: • ресурс — существительное во множественном числе: /orders; • конкретный ресурс — по идентификатору: /orders/9001; • вложенный — если принадлежит родителю: /orders/9001/items; • действие выражает метод, а не глагол в пути: не /getOrder, не /createOrder. Исключение — действие вне «создать, прочитать, изменить, удалить», например отмена: POST /orders/9001/cancel (подробно — в следующем уроке). Параметр пути (path) указывает, какой ресурс нужен: 9001 в /orders/9001. Параметр запроса (query) стоит после «?» и фильтрует, сортирует или листает список: /orders?customerId=42&status=delivered — заказы клиента 42 в статусе delivered (доставлен). Заголовки, которые аналитик пишет в контракт, — в таблице ниже. Позже к ним добавится Idempotency-Key.
Хороший и плохой адрес
ЗадачаТакНе так
получить заказGET /v1/orders/9001GET /v1/getOrder?id=9001
создать заказPOST /v1/ordersPOST /v1/orders/create
позиции заказаGET /v1/orders/9001/itemsGET /v1/orderItems?order=9001&all=true
оплаченные заказыGET /v1/orders?status=paidGET /v1/orders/paid
Заголовки в контракте
ЗаголовокЧто передаёт
Content-Typeформат тела: application/json
Acceptв каком формате клиент ждёт ответ
Authorizationтокен клиента
Locationадрес созданного ресурса: /v1/orders/9001
Retry-Afterчерез сколько можно повторить запрос
Конспект урока
Запрос, ответ и ресурсы
Повторение из курса по тестированию: HTTP-запрос состоит из метода, адреса (URI: путь и параметры запроса), заголовков и тела, ответ — из кода статуса, заголовков и тела. HTTP не помнит прошлых запросов (stateless): каждый запрос несёт всё нужное серверу, включая токен. REST — архитектурный стиль (Рой Филдинг, 2000), а не формат данных: у каждого ресурса свой адрес, у методов один смысл для всех ресурсов (единый интерфейс), сервер не хранит состояние диалога, ответы могут кэшироваться. Данные идут в JSON, XML или другом формате. «REST = JSON» — заблуждение: JSON просто встречается чаще. Правила адресов: • ресурс — существительное во множественном числе: /orders; • конкретный ресурс — по идентификатору: /orders/9001; • вложенный — если принадлежит родителю: /orders/9001/items; • действие выражает метод, а не глагол в пути: не /getOrder, не /createOrder. Исключение — действие вне «создать, прочитать, изменить, удалить», например отмена: POST /orders/9001/cancel (подробно — в следующем уроке). Параметр пути (path) указывает, какой ресурс нужен: 9001 в /orders/9001. Параметр запроса (query) стоит после «?» и фильтрует, сортирует или листает список: /orders?customerId=42&status=delivered — заказы клиента 42 в статусе delivered (доставлен). Заголовки, которые аналитик пишет в контракт, — в таблице ниже. Позже к ним добавится Idempotency-Key.