保存したクレジットカードを使用した注文など、ユーザーとのさまざまなやり取りを処理するRESTful APIを作成しています。
注文が成功した場合は200 OKを返し、注文リクエストの形式が無効または無効な場合は400 Bad Requestを返します。しかし、注文の実際の処理中に問題が発生した場合はどうすればよいですか?
- ユーザーリソースのサーバーへのクライアントPOSTS注文。ユーザーが存在しない場合は、404 Not Foundが返されます。
- 注文の形式と情報が検証されます。無効な場合、400 Bad Requestが返されます。
- 注文が処理されました。注文が成功すると、注文に対して201 Createdが返されます。予期しないエラーが発生した場合、500サーバーエラーが返されます。
最後のステップは問題です。他の理由で注文が完了しなかった場合はどうすればよいですか?考えられるシナリオは次のとおりです。
- 商品は売り切れです
- ユーザーの最大注文数に達しました
- クレジットカード決済失敗(資金不足等)
これは、400と500のどちらにも適しているとは思えません。適切なコードがない場合、400と見なすことができます。ビジネスルールによれば、リクエストは無効でした。正確ではないようです。
編集:同じトピックに関するこの既存のディスカッションも見つかりました。そこにあるすべての回答は、このタイプの違反にステータスコードを使用することを示しているようです。400、409、または422の拡張機能を使用することについての議論もあります。