Когда уместно ответить ошибкой 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" возвращается с описанием.