[解決済み] 一般的なリクエストに失敗した場合(エラーではない)、適切なHTTPステータスコードのレスポンスは何でしょうか?
質問
私は、保存されたクレジットカードを使用して注文することを含む、多くのユーザーインタラクションを処理するRESTful APIを作成しています。
注文が成功した場合、私は 200 OK を返し、注文要求が不正であるか無効である場合、私は 400 Bad Request を返しています。しかし、実際の注文処理中に問題が発生した場合は、何を返せばよいのでしょうか。
- クライアントがサーバーにユーザー リソースの注文を POSS します。ユーザーが存在しない場合、404 Not Found が返されます。
- 注文の形式と情報が検証されます。有効でない場合、400 Bad Request が返されます。
- 注文が処理されます。注文が成功した場合、その注文に対して201 Createdが返されます。予期しないエラーが発生した場合、500 Server Errorが返されます。
最後のステップが問題です。他の理由で注文が完了しなかった場合、何を返せばよいのでしょうか。考えられるシナリオは次のとおりです。
- 製品が完売している
- ユーザーによる注文の上限に達しました
- クレジットカード決済の失敗(残高不足など)
これは 400 にも 500 にも適さないように思えます。どちらかというと、よりよいコードがない場合は 400 と見なされるかもしれません - 要求はビジネス ルールによると無効でした。ただ、正確ではないようです。
編集: さらに この既存の議論 を見つけました。そこでのすべての回答は、このタイプの違反にステータスコードを使用することを指摘しているようで、400、409、または422拡張を使用するかどうかについて議論されています。
どのように解決するのですか?
ビジネスルールには400を使用する必要があります。注文が受理されなかった場合、2xx を返してはいけません。HTTP はアプリケーション プロトコルであり、そのことを決して忘れてはなりません。もしあなたが2xxを返した場合、クライアントは、あなたがボディで送ったどんな情報にも関係なく、注文が受け入れられたと仮定することができます。
から RESTful ウェブサービス クックブック :
いくつかのウェブサービスが犯すよくある間違いは、成功を反映したステータスコード(200から206までのステータスコード)を返すことです。 コードを返すことです (ステータスコードは 200 から 206、300 から 307 まで)。 307)を返しますが、エラー状態を説明するメッセージボディを含んでいます。 これは、HTTP を認識するソフトウェアがエラーを検出するのを妨げます。例えば 例えば、キャッシュが成功したレスポンスとして保存し、後続のクライアントに提供します。 キャッシュは成功レスポンスとして保存し、後続のクライアントに提供します。 リクエストを成功させることができる場合でも、キャッシュは成功レスポンスとして保存し、後続のクライアントに提供します。
4xxと5xxの判断はお任せしますが、エラーステータスコードを使用した方が良いでしょう。
関連
-
[解決済み] プロキシが全く応答を受け取らない場合、502 HTTPステータスコードを使用すべきですか?
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] POSTとPUT HTTP REQUESTの違いは何ですか?
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] HTTP DELETE リクエストにエンティティボディは許されますか?
-
[解決済み] REST APIサービスが検証に失敗した場合に返すべき適切なHTTPステータスコードは何ですか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み] [Solved] リクエストに必須パラメータがない場合、どのようなHTTPステータスレスポンスコードを使用すればよいですか?
-
[解決済み】有効なリクエストでありながら、データが空の場合の適切なRESTレスポンスコードは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Google ChromeでSPDYを無効にする方法
-
[解決済み] HTTPポストで文字+が%2Bに変換される
-
[解決済み] X-REQUEST-ID httpヘッダーとは何ですか?
-
[解決済み] ブラウザによって異なるURLの最大長とは?
-
[解決済み] OPTIONSリクエストを送信する理由と、それを無効にする方法を教えてください。
-
[解決済み] ETagとヘッダーエクスパイアの比較
-
[解決済み】URI、URL、URNの違いは何ですか?[重複] URIとURLとURNの違いは何ですか?
-
[解決済み】サーバーサイドアプリケーション(PHP、Ruby、Pythonなど)でURLのハッシュ部分を読み取ることはできますか?)
-
[解決済み] URLマトリックスパラメータとクエリパラメータの比較
-
[解決済み] ログインページにリダイレクトする際の正しいHTTPステータスコードは何ですか?