Когда уместно ответить с ошибкой HTTP 412?
Мне непонятно, когда вы должны и не должны возвращать HTTP 412: Precondition Failed, ошибка для веб-службы? Я думаю использовать его при проверке данных. Например, если данные клиента POST XML и эти данные отсутствуют, требуемый элемент данных, а затем ответ 412 и описание ошибки.
Согласуется ли это с духом ответа с помощью HTTP 412 или что-то еще нужно использовать (например, другой код ошибки HTTP или исключение веб-приложения)?
Ответы
Ответ 1
Если вы посмотрите RFC 2616, вы увидите ряд заголовков запросов, которые можно использовать для применения условий к запросу:
If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Эти заголовки содержат "предварительные условия", позволяя клиенту сообщать серверу только о завершении запроса, если выполняются определенные условия. Например, вы используете запрос PUT
для обновления состояния ресурса, но вы хотите, чтобы только PUT
выполнялось, если ресурс не был изменен кем-то еще с момента вашего последнего GET
.
Код состояния ответа 412
(Precondition Failed) обычно используется, когда эти предварительные условия терпят неудачу.
Ваш пример звучит как неверный запрос (т.е. клиент отправил недопустимые данные из-за отсутствующих значений). Код состояния 400
(Bad Request) более подходит здесь IMO.
Ответ 2
412 зарезервирован для случаев, когда запрос является условным, и условие не выполняется.
Для вашего случая использования 422 Unprocessable Entity является хорошим совпадением.
Ответ 3
Лучше всего было бы избежать 412. На практике большинство веб-сервисов, которые я использовал, отправляют 400 code (Bad Request). У многих фреймворков есть встроенная поддержка для 400, и ваши клиенты оценят более распространенный код ошибки. Часто, особенно с интерфейсами REST, возвращается простое "сообщение" или "ошибка" с описанием.