Подтвердить что ты не робот

Каков правильный код ответа HTTP для запроса без обязательных полей

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

Что должен делать сервер, если post_id не предоставляется?

По-видимому, пользователь никогда не должен сталкиваться с таким поведением, поэтому пусть он пурист.

Мое первое занятие было бы 400 плохим запросом, но spec говорит

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 чувствует себя странно, поскольку это проблема с запросом.

Thoughs?

4b9b3361

Ответ 1

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

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

ИЗМЕНИТЬ

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

Ответ 2

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

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

Из rfc2616:

10.4.4 403 Запрещено

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