以下のシナリオによると、
誰かが正しい形式のデータを使用してサーバーにリクエストを行ったが、単に「良い」データではなかったとします。たとえば、文字列値を期待するAPIエンドポイントに誰かが文字列値を投稿したとします。しかし、文字列の値にはブラックリストに登録されたデータが含まれていました(たとえば、パスワードとして「password」を使用できないようにしている)。ステータスコードは400または422のいずれかです。
これまでは、w3.orgによると、「400 Bad Request」を返していました。
不正な構文のため、サーバーはリクエストを理解できませんでした。クライアントは変更せずにリクエストを繰り返すべきではありません。
この説明は状況に完全に適合しません。しかし、HTTP / 1.1プロトコルで定義されているコアHTTPステータスコードのリストを参照すると、おそらくそれが最善の策です。
しかし最近、私の開発チームの誰かが、人気のあるAPIがHTTP拡張機能を使用してエラー報告をより詳細に取得し始めていることを指摘しました。具体的には、TwitterやRecurlyなどの多くのAPIが、WebDAVのHTTP拡張で定義されているステータスコード「422 Unprocessable Entity」を使用しています。HTTPステータスコード422の状態:
422(Unprocessable Entity)ステータスコードは、サーバーがリクエストエンティティのコンテンツタイプを理解しているため(415(Unsupported Media Type)ステータスコードが不適切)、リクエストエンティティの構文が正しい(つまり、400(Bad Request )ステータスコードが不適切)ですが、含まれている指示を処理できませんでした。たとえば、XMLリクエストの本文に整形式(つまり、構文的には正しい)が含まれているが、意味的に誤りのあるXML命令が含まれている場合に、このエラー条件が発生する可能性があります。
上記のパスワードの例に戻ると、この422ステータスコードはより適切に感じられます。サーバーはあなたが何をしようとしているのかを理解しています。送信するデータを理解している。単にそのデータを処理させないだけです。