Итак, я разрабатываю Rest API
Когда выполняется POST для создания ресурса, а обязательное поле отсутствует, что я должен вернуть?
ошибка 400, неверный запрос
OR
412 - Предварительное условие не выполнено
И почему?
Итак, я разрабатываю Rest API
Когда выполняется POST для создания ресурса, а обязательное поле отсутствует, что я должен вернуть?
ошибка 400, неверный запрос
OR
412 - Предварительное условие не выполнено
И почему?
Используйте 400, если параметры запроса неверны. Используйте 412, если один из If-*
запросов заголовков, например If-Match
, If-Modified-Since
и т. д. не правы.
Почему? Это именно то, что говорит RFC. См., например, этот отрывок из спецификации If-Match
:
Если ни один из тегов сущностей не совпадает или если задано «*», а текущей сущности не существует, сервер НЕ ДОЛЖЕН выполнять запрошенный метод и ДОЛЖЕН возвращать ответ 412 (ошибка предварительного условия). Это поведение наиболее полезно, когда клиент хочет запретить методу обновления, такому как PUT, модифицировать ресурс, который изменился с момента его последнего извлечения клиентом.
412 используется, когда ваш сервер не соответствует условию, указанному клиентом.
В вашем случае вы должны использовать 400. Это просто плохой запрос.
См. эту ссылку для некоторых объяснений заголовков предварительных условий.
Заголовок Etag — это, как правило, строка, представляющая наш ресурс в заголовках HTTP. Вы запрашиваете ресурс с помощью If-Match, который является предварительным условным заголовком HTTP. Он отправит 412, если он не соответствует отправленному вами коду.
If-None-Match сообщает серверу обработать весь ответ, только если Etag отличается от отправленного клиентом.
Вы можете использовать код состояния 422. Если вы не хотите, 400 подойдет.