Выбор ответа Middle REST API и OpenAPI спрашивают часто обновлено

Статус при конфликте состояния

Вопрос

Клиент отправляет POST /orders/42/cancel, а заказ уже передан курьеру и отменить его нельзя. Какой код ответа подходит лучше всего?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 409 Conflict. Запрос корректный, ресурс существует, но его текущее состояние не позволяет действие, это конфликт: 409.

Варианты ответа

  1. 200 OK с полем error в теле
  2. 409 Conflictправильный ответ
  3. 404 Not Found
  4. 500 Internal Server Error

Разбор

Запрос корректный, ресурс существует, но его текущее состояние не позволяет действие, это конфликт: 409. 404 соврал бы, что заказа нет. 500 означает сбой сервера, а не бизнес-правило. 200 с ошибкой в теле ломает клиентов и мониторинг, которые ориентируются на статус. Некоторые API возвращают 422, это тоже обсуждаемый вариант, но 409 точнее про состояние.

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

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