awesome-everything EN
↑ Обратно к восхождению

API

REST-моделирование: чтение запросов и дизайна

Суть Читай реальные HTTP-запросы, дизайны URL и формы ответов, предскажи сбой и выбери фикс с наибольшим рычагом, который senior сделает первым.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Дефекты дизайна API видны в wire-формате — строке запроса, форме URL, теле ответа. Прочитай каждый сниппет, найди ловушку и выбери фикс, который senior-инженер сделает первым.

Цель

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

Сниппет 1 — запрос смены состояния

PATCH /orders/42 HTTP/1.1
Content-Type: application/json

{ "status": "cancelled" }
Викторина

Так API отменяет заказ. В чём дефект и какой фикс?

Сниппет 2 — дизайн URL ресурсов

GET  /getUserOrders?userId=7
POST /createOrderForUser?userId=7
GET  /customers/7/projects/3/orders/42/items/9/discounts
Викторина

В этих трёх строках два разных запаха моделирования. Назови их и редизайн.

Сниппет 3 — идемпотентный ретрай

POST /payments HTTP/1.1
Idempotency-Key: 7f3c9a2e-...-d41
Content-Type: application/json

{ "amount": 4200, "currency": "usd", "source": "card_x" }
Викторина

Клиент шлёт этот запрос, TCP-соединение рвётся до прихода ответа, и клиент ретраит идентичный запрос с тем же Idempotency-Key. Что должен сделать сервер?

Сниппет 4 — протекающий ответ

{
  "id": 42,
  "full_name": "Ada Lovelace",
  "password_hash": "$2b$12$...",
  "is_deleted": false,
  "internal_risk_score": 0.13
}
Викторина

Это ресурс user, сериализованный прямо из строки ORM. В чём ошибка и структурный фикс?

Итог

Любой дефект API читается с провода: записываемое поле status — неохраняемый переход (используй охраняемый action-ресурс); глаголы в пути и шестиуровневая вложенность — RPC и chattiness (noun-ресурсы, мелкие пути, ID в корне); ретраенный POST нуждается в idempotency key для безопасного дедупа; а строка, сериализованная прямо в JSON, сливает credential и внутренние поля и приваривает контракт к схеме (отображай через DTO). Читай запрос, найди структурный запах, чини форму — не симптом.

Продолжить восхождение ↑REST-моделирование: спроектируй API заказов, переживающий изменения
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.