Так что я занимаюсь разработкой API RestHttp Код состояния 400 против 412
Когда POST делается для создания ресурса и отсутствует обязательное поле, что я должен вернуться?
400 - Bad Request
ИЛИ
412 - Precondition Failed
и почему?
Так что я занимаюсь разработкой API RestHttp Код состояния 400 против 412
Когда POST делается для создания ресурса и отсутствует обязательное поле, что я должен вернуться?
400 - Bad Request
ИЛИ
412 - Precondition Failed
и почему?
Использовать 400, если параметры являются неправильными. Используйте 412, если один из If-*
запрашивает заголовки, такие как If-Match
, If-Modified-Since
и т. Д. Являются неправильными.
Почему? Вот что говорит RFC. Смотри, например, этот экстракт If-Match
спецификации:
Если ни один из матча объектные метки, или если «*» дается и не текущий объект не существует, сервер НЕ ДОЛЖЕН выполнять запрошенный метод, и должен возвращать 412 (Условие с условием отказа). Такое поведение наиболее полезно, когда клиент хочет предотвратить изменение способа обновления, такого как PUT, от изменения ресурса, который был изменен с момента последнего получения клиентом.
412 используется, когда ваш сервер не отвечает условиям, указанным клиентом.
В вашем случае вы должны использовать 400. Это всего лишь плохая просьба.
См. Это link для объяснения заголовков предварительных условий.
Заголовок Etag, как правило, представляет собой строку, представляющую наш ресурс в заголовках HTTP. Вы запрашиваете ресурс с аргументом If-Match, это предварительный HTTP-заголовок . Он отправит 412, если он не соответствует отправленному вами коду.
If-None-Match сообщает серверу обрабатывать весь отклик, только если Etag отличается от той, которая была отправлена клиентом.
Почему downvote? Что случилось с ответом? – nunespascal
Подумайте, что у кого-то был плохой день. Просто проигнорируйте это и дайте системе выполнить свою работу :) – BalusC
Имейте upvote, чтобы сбалансировать это. –
Вы можете использовать код состояния 422. Если вы этого не хотите, 400 - это нормально.
Он также заявляет, что запрос не может быть выполнен из-за искаженного синтаксиса для 400. – Rob
Эта страница действительно помогла мне - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- Использование запросов «PUT» для контекста облегчило мне понять, для чего это необходимо, так как всегда легко злоупотреблять определенными кодами состояния. – Charlie