Подтвердить что ты не робот

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

Итак, я разрабатываю API Rest

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

400 - Плохой запрос

ИЛИ

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

И почему?

4b9b3361

Ответ 1

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

Почему? Это то, что RFC говорит. См., Например, этот отрывок If-Match:

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

Ответ 2

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

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

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

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

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

Ответ 3

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