API
REST-моделирование: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый — это решение, которое ты принимаешь у доски или в ревью PR: не определение для заучивания, а компромисс, который надо отстоять, когда коллега возражает.
Убедись, что связываешь моделирование ресурсов, не-CRUD переходы, глубину вложенности, разделение representation/resource, идемпотентность и прагматику HATEOAS — тот синтез, к которому вёл урок.
Коллега предлагает GET /getOpenOrders и POST /createOrder как два новых эндпоинта. Какое возражение самое точное?
Нужно выставить 'отменить заказ' — охраняемый переход с правилами (не отгружен, не отменён ранее). Какая модель достаточно RESTful и безопасна?
Дашборд рендерит /customers/7/projects/3/orders/42/items девятью последовательными вызовами, а путь ломается при переносе item между заказами. Какой senior-фикс?
API сериализует строки ORM прямо в JSON. Почему добавление явного mapping-слоя (DTO/сериализатор) — решение с наибольшим рычагом в дизайне?
Клиент ретраит POST /payments из-за таймаута ответа, и покупателя списывают дважды. Какое утверждение об идемпотентности верно?
Пурист блокирует твой PR, потому что ответы не несут гипермедиа-ссылок (HATEOAS). Как senior должен это взвесить?
Сквозная линия: REST API моделирует существительные, нужные клиенту, с глаголом в HTTP-методе, фильтрацией и пагинацией в query-параметрах, а не-CRUD переходы — как охраняемые action- или transition-ресурсы, а не клиент-записываемое поле status. Держи вложенность мелкой и используй expansion против chatty-экранов. Сериализуй через mapping-слой, чтобы representation был контрактом, которым ты владеешь, а не твоей схемой БД. Помни, что POST не идемпотентен (используй idempotency key для безопасных ретраев), а HATEOAS — изящная теория, которая level-2 REST обычно не нужна.