私のWebアプリケーションはサードパーティのAPIを呼び出します。
APIの呼び出しに成功したが、システムで処理できない無効なデータが返された場合、呼び出し元のユーザーに返すのに最も適したHttpCodeはどれですか。
クライアントに戻るための最も適切な応答はどれですか?
問題がユーザー/クライアントのせいではない場合、サーバーは5xxエラーを返すはずです。 4xxエラーは、>> request <<が何らかの方法で正しくない場合にのみ返されます。
状況に応じて、500または503のいずれかが適切な場合があります。
クライアントに関する限り、「外部要因」はサーバー/サービスの内部にあります。したがって、500が適切である可能性があります。
問題が比較的短時間で解決する(または解決する)可能性が高い場合は、503が適切です。
どちらでも大丈夫でしょう。
別の可能性は、非標準の5xxコードを返すことです。非標準の(つまり、HTTP 1.1仕様で定義されていない)ステータスコードは間違っていないことに注意してください。これを行うには十分な前例があります...追加のコードを定義する他のRFCの前例を含みます。例については、ウィキペディア HTTPステータスコードのリスト を参照してください。
私はこれを示唆するコメントに気づきました:
その場合、私は500を選びますが、ユーザーがエラーのせいにする可能性があります。
問題の原因の詳細を500応答の本文に(適切な形式で)含めれば、問題にはなりません。
適切なページ(200コード)を出力し、サードパーティの通話の失敗について通知し、後で再試行するように依頼します。
IMO、それは間違っています。 200コードは、リクエストが成功したことを意味します...それは明らかに成功していません。これがRESTfulサービスであると仮定すると、クライアントはステータスコードを使用して、次に何をするかを決定します。それは嘘であってはなりません。 「後で再試行してください」と言いたい場合は、503応答を送信する必要があります。おそらくRetry-Afterヘッダーが付いています。