Код-ревью Middle REST API и OpenAPI спрашивают часто обновлено

Ревью контракта API заказов

Вопрос

Аналитик описал API заказов. Найди проблемы в контракте.

GET  /getOrders?page=1               -> 200 список всех заказов
POST /orders                        -> 200 {"result": "ok"}
POST /orders/{id}/delete            -> 200
PUT  /orders/{id}                   -> меняет только статус
GET  /orders/{id}                   -> 200 {"error": "not found"}, если заказа нет
POST /payments {"amount": 1499.99}  -> 200

Коротко

Исправленный вариант: GET /orders?limit&cursor с фильтрацией по пользователю, POST /orders → 201 + Location, DELETE /orders/{id} или POST /orders/{id}/cancel → 204/409, PATCH /orders/{id}, 404 в формате Problem Details, POST /payments с Idempotency-Key и суммой строкой или в копейках с валютой.

Что должен найти ревьюер

  1. Ошибкастрока 1
    Глагол в URL; «все заказы» без фильтра по владельцу и без ограничения размера страницы
  2. Ошибкастрока 2
    Создание должно возвращать 201 с id или Location созданного заказа, а не абстрактный «ok»
  3. Стильстрока 3
    Удаление через POST с глаголом в пути: по REST это DELETE /orders/{id} или отмена как отдельное действие
  4. Ошибкастрока 4
    PUT заменяет ресурс целиком; частичное изменение статуса это PATCH или отдельное действие
  5. Ошибкастрока 5
    Ошибка с кодом 200: нужен 404 и единый формат ошибки
  6. Безопасностьстрока 6
    Деньги числом с плавающей точкой без валюты и без Idempotency-Key для платежа

Разбор

Исправленный вариант: GET /orders?limit&cursor с фильтрацией по пользователю, POST /orders → 201 + Location, DELETE /orders/{id} или POST /orders/{id}/cancel → 204/409, PATCH /orders/{id}, 404 в формате Problem Details, POST /payments с Idempotency-Key и суммой строкой или в копейках с валютой.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.