web-dev-qa-db-ja.com

失敗したPOSTリクエストに使用するHTTP応答コードは何ですか?

POSTリクエストが成功せず、リクエスト本文が正しくフォーマットされた場合、どのHTTP応答コードを返す必要がありますか?

成功した場合POSTリクエスト私は201を使用しています-作成されましたが、同等の作成されていないコードはありません。

私は400(悪いリクエスト)のどちらかを考えていますが、それは実際にはリクエストのフォーマットが不十分であるか、304-変更されていないことをユーザーに示します。

5
mko

POSTリクエストが成功せず、リクエスト本文が正しくフォーマットされている場合、どのHTTP応答コードを返す必要がありますか?

リクエストペイロードの構文は有効であるが、データが無効であるために処理できない場合は、 422 :を使用できます。

11.2。422処理不可能なエンティティ

422(処理不能エンティティ)ステータスコードは、サーバーが要求エンティティのコンテンツタイプを理解していることを意味し(したがって、415(サポートされていないメディアタイプ)ステータスコードは不適切です)、要求エンティティの構文は次のとおりです。正しい(したがって、400(不正な要求)ステータスコードは不適切です)が、含まれている命令を処理できませんでした。たとえば、このエラー状態は、XML要求本文に整形式(つまり、構文的に正しい)であるが、意味的に誤ったXML命令が含まれている場合に発生する可能性があります。

ペイロードの何が問題になっているのかを説明する適切な説明を応答ペイロードに提供することを忘れないでください。 HTTP APIの問題を報告する方法の詳細については、 RFC 7807 を参照してください。


更新(コメントによる)

POSTリクエストが失敗する理由は、ビジネスロジックエラーです。たとえば、「アカウントの残高が少なすぎて5.00米ドルを引き出すことができません」

コメント で説明されている状況では、 403 または 409 の方が適しています。

6.5.3。403Forbidden

403(禁止)ステータスコードは、サーバーが要求を理解したが、それを承認することを拒否したことを示します。要求が禁止された理由を公開したいサーバーは、応答ペイロード(存在する場合)にその理由を記述することができます。 [...]

6.5.8。409競合

409(競合)ステータスコードは、ターゲットリソースの現在の状態との競合が原因で、要求を完了できなかったことを示します。このコードは、ユーザーが競合を解決してリクエストを再送信できる可能性がある状況で使用されます。サーバーは、ユーザーが競合の原因を認識するのに十分な情報を含むペイロードを生成する必要があります。 [...]

5
cassiomolin