Когда уместно ответить ошибкой HTTP 412?

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

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

3 ответа

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

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

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

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

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

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

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

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

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