Http код состояния 400 против 412

Поэтому я разрабатываю Rest API

Когда сделать POST для создания ресурса и пропустить обязательное поле, что я должен вернуть?

ошибка 400, неверный запрос

ИЛИ ЖЕ

412 - Сбой предварительного условия

И почему?

3 ответа

Решение

Используйте 400, если параметры запроса неверны. Используйте 412, если один из If-* заголовки запроса как If-Match, If-Modified-Since и т. д. не правы.

Зачем? Это как раз то, что говорит RFC. Смотрите, например, этот экстракт If-Match Спецификация:

Если ни один из тегов объекта не совпадает или если задано "*", а текущий объект не существует, сервер НЕ ДОЛЖЕН выполнять запрошенный метод и ДОЛЖЕН возвращать ответ 412 (Precondition Failed). Это поведение наиболее полезно, когда клиент хочет предотвратить изменение метода обновления, такого как PUT, с момента последнего получения клиентом ресурса.

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

В вашем случае вы должны использовать 400. Это просто плохой запрос.

Посмотрите эту ссылку для объяснения заголовков предварительного условия.

Заголовок Etag - это, как правило, строка, представляющая наш ресурс в заголовках HTTP. Вы запрашиваете ресурс с If-Match - это условный заголовок HTTP. Он отправит 412, если он не совпадает с кодом, который вы отправили.

If-None-Match сообщает серверу обрабатывать весь ответ, только если Etag отличается от Etag, отправленного клиентом.

Вы можете использовать код состояния 422. Если вы не хотите, 400 в порядке.

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