Когда уместно ответить ошибкой HTTP 412? - PullRequest
33 голосов
/ 20 марта 2011

Мне неясно, когда вы должны и не должны возвращать HTTP 412: Precondition Failed, ошибка для веб-службы? Я думаю об использовании его при проверке данных. Например, если в XML-данных клиента POST и этих данных отсутствует обязательный элемент данных, ответьте 412 и описание ошибки.

Соответствует ли это духу ответа по HTTP 412 или следует использовать что-то еще (например, другой код ошибки http или исключение веб-приложения)?

Ответы [ 3 ]

53 голосов
/ 20 марта 2011

Если вы посмотрите на RFC 2616 , вы увидите несколько заголовков запроса, которые можно использовать для применения условий к запросу:

If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since

Эти заголовки содержат «предварительные условия», позволяя клиенту сказать серверу завершить запрос только при соблюдении определенных условий.Например, вы используете запрос PUT для обновления состояния ресурса, но вы хотите, чтобы действие PUT действовало только в том случае, если ресурс не был изменен кем-то еще со времени вашего последнего GET.

Код состояния ответа 412 (Precondition Failed) обычно используется при сбое этих предварительных условий.

Ваш пример звучит как недопустимый запрос (т. Е. Клиент представил данные, которые являются недопустимыми из-за пропущенных значений).Код состояния 400 (неправильный запрос) более уместен здесь, ИМО.

10 голосов
/ 20 марта 2011

412 зарезервировано для случаев, когда запрос является условным, а условие не выполнено.

Для вашего случая использования 422 Unprocessable Entity - хорошее совпадение.

8 голосов
/ 20 марта 2011

Лучше всего избегать 412. На практике большинство веб-служб, которые я использовал, отправляют код 400 (неправильный запрос) .Многие фреймворки также имеют встроенную поддержку 400, и ваши клиенты оценят более распространенный код ошибки.Часто, особенно с интерфейсами REST, простой элемент «message» или «error» возвращается с описанием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...