400 Bad Requestは、ユースケースに最適なHTTP / 1.1ステータスコードになりました。
あなたの質問(および私の最初の回答)の時点では、RFC 7231は重要ではありませんでした。その時点で400 Bad Request
、RFC 2616が(私を強調して)言っているため、私は反対しました。
不正な構文のため、サーバーはリクエストを理解できませんでした。
また、記述したリクエストは、構文的に有効なHTTPに格納された構文的に有効なJSONであるため、サーバーはリクエストの構文に問題がありません。
ただし 、Lee Saferiteがコメントで指摘したように、RFC 2616を廃止したRFC 7231にはその制限が含まれていません。
400(Bad Request)ステータスコードは、クライアントエラーであると認識される何か(たとえば、不正な形式の要求構文、無効な要求メッセージのフレーミング、または不正な要求ルーティング)により、サーバーが要求を処理できないか、または処理しないことを示します。
ただし、その言い直しの前に(または、RFC 7231が現在提案されている標準にすぎないかどうか疑問に思っている場合)、RFC 4918の概要にあるように、ユースケースのHTTPステータスコードが正しく422 Unprocessable Entity
ないように見えることはありません。
HTTP / 1.1によって提供されるステータスコードは、WebDAVメソッドで発生するほとんどのエラー状態を説明するのに十分ですが、既存のカテゴリに適切に分類されないエラーがいくつかあります。この仕様は、WebDAVメソッド用に開発された追加のステータスコードを定義します(セクション11)
そしての説明は422
言う:
422(Unprocessable Entity)ステータスコードは、サーバーがリクエストエンティティのコンテンツタイプを理解しているため(415(Unsupported Media Type)ステータスコードが不適切)、リクエストエンティティの構文が正しい(つまり、400(Bad Request )ステータスコードが不適切)ですが、含まれている指示を処理できませんでした。
(構文への参照に注意してください。7231は4918も一部廃止されていると思います)
これはあなたの状況とまったく同じように聞こえますが、疑いがある場合に備えて、次のように続けます。
たとえば、XMLリクエストの本文に整形式(つまり、構文的には正しい)が含まれているが、意味的には誤りのあるXML命令が含まれている場合に、このエラー条件が発生することがあります。
(「XML」を「JSON」に置き換えてください。あなたの状況に同意できると思います)
さて、RFC 4918は「Web分散オーサリングとバージョン管理(WebDAV)のHTTP拡張機能」に関するものであり、(おそらく)WebDAVに関連することは何もしていないので、そこからのものを使用してはならないことに反対する人もいます。
状況を明示的にカバーしていない元の標準のエラーコードを使用するか、状況を正確に説明する拡張機能からエラーコードを使用するかを選択できるので、後者を選択します。
さらに、RFC 4918セクション21.4はIANAハイパーテキスト転送プロトコル(HTTP)ステータスコードレジストリを参照しており、422が見つかります。
私は、HTTPクライアントまたはサーバーがそのレジストリからのステータスコードを正しく使用する限り、それらを使用することは完全に合理的であることを提案します。
しかし、HTTP / 1.1の時点では、RFC 7231が牽引力を持っているため、そのまま使用して400 Bad Request
ください。