web-dev-qa-db-ja.com

無効なデータが返されました。どのHttpCodeを返しますか?

私のWebアプリケーションはサードパーティのAPIを呼び出します。

APIの呼び出しに成功したが、システムで処理できない無効なデータが返された場合、呼び出し元のユーザーに返すのに最も適したHttpCodeはどれですか。

  • 500、私は確信していません。これは内部エラーでしたが、外部要因によるものです
  • 503、おそらく、非常に曖昧ですが
  • 400、4XXエラーは通常、クライアントがサーバーに接続することに関連しているため、誤解を招く可能性があります。

クライアントに戻るための最も適切な応答はどれですか?

4
Liath

問題がユーザー/クライアントのせいではない場合、サーバーは5xxエラーを返すはずです。 4xxエラーは、>> request <<が何らかの方法で正しくない場合にのみ返されます。

状況に応じて、500または503のいずれかが適切な場合があります。

  • クライアントに関する限り、「外部要因」はサーバー/サービスの内部にあります。したがって、500が適切である可能性があります。

  • 問題が比較的短時間で解決する(または解決する)可能性が高い場合は、503が適切です。

どちらでも大丈夫でしょう。

別の可能性は、非標準の5xxコードを返すことです。非標準の(つまり、HTTP 1.1仕様で定義されていない)ステータスコードは間違っていないことに注意してください。これを行うには十分な前例があります...追加のコードを定義する他のRFCの前例を含みます。例については、ウィキペディア HTTPステータスコードのリスト を参照してください。


私はこれを示唆するコメントに気づきました:

その場合、私は500を選びますが、ユーザーがエラーのせいにする可能性があります。

問題の原因の詳細を500応答の本文に(適切な形式で)含めれば、問題にはなりません。

適切なページ(200コード)を出力し、サードパーティの通話の失敗について通知し、後で再試行するように依頼します。

IMO、それは間違っています。 200コードは、リクエストが成功したことを意味します...それは明らかに成功していません。これがRESTfulサービスであると仮定すると、クライアントはステータスコードを使用して、次に何をするかを決定します。それは嘘であってはなりません。 「後で再試行してください」と言いたい場合は、503応答を送信する必要があります。おそらくRetry-Afterヘッダーが付いています。

10
Stephen C