Какой код ответа HTTP использовать для неудачного запроса POST?

Какой код ответа HTTP должен быть возвращен, если запрос POST не был успешным и тело запроса было правильно отформатировано?

Для успешного запроса POST я использую 201 - Создано, но нет эквивалентного не созданного кода.

Я думаю, что либо 400 - плохой запрос, но это фактически указывает пользователю, что запрос плохо отформатирован или 304 - не изменен.

1 ответ

Решение

Какой код ответа HTTP должен быть возвращен при POST запрос не был успешным и тело запроса было правильно отформатировано?

Если вы имеете в виду синтаксис полезной нагрузки запроса, но он не может быть обработан из-за неверных данных, вы можете использовать 422:

11.2. 422 необработанного объекта

422 Код состояния (Unprocessable Entity) означает, что сервер понимает тип содержимого объекта запроса (следовательно, 415 (Неподдерживаемый тип носителя) код состояния не подходит), и синтаксис объекта запроса является правильным (таким образом, 400 (Неправильный запрос) код состояния не подходит), но не удалось обработать содержащиеся в нем инструкции. Например, это условие ошибки может возникать, если тело запроса XML содержит правильно сформированные (то есть синтаксически правильные), но семантически ошибочные инструкции XML.

Не забудьте предоставить хорошее описание в полезной нагрузке ответа, объясняющее, что не так с полезной нагрузкой. Обратитесь к RFC 7807 за подробной информацией о том, как сообщать о проблемах в HTTP API.


Обновления (согласно комментариям)

Причина, почему POST запрос не будет выполнен - ​​это скорее ошибка бизнес-логики, например, "остаток на счете слишком низкий, чтобы вывести 5,00 долларов США"

Для ситуации, описанной в вашем комментарии, 403 или же 409 будет лучше подойдет.

6.5.3. 403 Запрещено

403 (Запрещенный) код состояния указывает, что сервер понял запрос, но отказывается его авторизовать. Сервер, который хочет обнародовать, почему запрос был запрещен, может описать эту причину в полезной нагрузке ответа (если есть). [...]

6.5.8. 409 конфликт

409 (Конфликт) код состояния указывает, что запрос не может быть выполнен из-за конфликта с текущим состоянием целевого ресурса. Этот код используется в ситуациях, когда пользователь может разрешить конфликт и повторно отправить запрос. Сервер ДОЛЖЕН генерировать полезную нагрузку, которая включает в себя достаточно информации, чтобы пользователь мог распознать источник конфликта. [...]

Другие вопросы по тегам