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 в порядке.