Какой правильный HTTP-код ответа на запрос без обязательных полей - PullRequest
19 голосов
/ 22 февраля 2011

Рассмотрим простой случай, когда пользователь удаляет сообщение.Это простой HTTP-запрос DELETE / POST с одним обязательным полем post_id.

Что должен делать сервер, если post_id не указан?

Очевидно, что пользователь никогда не должен сталкиваться с таким поведением, поэтому давайте будем пуристическими.

Первым делом было бы 400 неверных запросов, но спецификация гласит:

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

, и я бы сказал, что отсутствующее поле в порядке из синтаксиса / http POV, это семантическое требование, специфичное для предметной области приложения..

200 Хорошо с объяснениями - это плохо, 500 кажется странным, поскольку это проблема запроса.

Хотя?? 1014 *

Ответы [ 2 ]

32 голосов
/ 22 февраля 2011

400 - правильный ответ.

400 не ограничен искаженным синтаксисом с точки зрения HTTP.Отсутствие обязательного аргумента является ошибкой в ​​синтаксисе, определяемом приложением, и, таким образом, «неверный запрос»

EDIT

Сначала кажется странным, что нет отдельногоКод возврата для этого, но коды возврата предназначены для того, чтобы различать, какие действия должен предпринять клиент.Код ошибки 400 означает, что клиент должен изменить данные POST или строку запроса на формат, определенный приложением.Следовательно, это подходит для этого случая.

1 голос
/ 24 февраля 2012

В сценарии REST ресурс, который необходимо удалить, должен быть идентифицирован по URL-адресу, поэтому идентификатор ресурса должен быть частью этого URL-адреса, чтобы правильно его идентифицировать.Если это предположение верно, то URL либо идентифицирует другой ресурс для удаления, либо это не так (что даст 404)

В общем случае, однако, отсутствует параметр, я часто использую403 Запрещенная ошибка.Причина в том, что запрос был понят, но я не собираюсь делать то, что просили (потому что что-то не так).Сущность ответа объясняет, что не так, поэтому, если ответ является HTML-страницей, сообщения об ошибках находятся на странице.Если это ответ в формате JSON или XML, информация об ошибке находится там.

От rfc2616 :

10.4.4 403 Запрещено

Сервер понял запрос, но отказывается его выполнить.
Авторизация не поможет, и запрос НЕ ДОЛЖЕН повторяться.
Если метод запроса не HEAD и сервер желает сделать
общедоступным, почемуЗапрос не был выполнен, он ДОЛЖЕН описать причину отказа в организации.Если сервер не желает предоставлять эту информацию клиенту, вместо него можно использовать код состояния 404
(не найден).

...