92

iPhoneおよびAndroidクライアントに公開されているRESTサービスがあります。現在、HTTPコード200、400、401、403、404、409、500などをフォローしています。

私の質問は、エラーの理由/説明/原因を置くための推奨される場所はどこですか?このように、REST APIのヘッダーに常にカスタムReasonを含める方が理にかなっていますか?

< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked

それとも、JSONを介して応答本文に含める方が良いですか?

< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }
4

3 に答える 3

106

400.xエラーコードのHTTP仕様からの引用:

4xxクラスのステータスコードは、クライアントがエラーを起こしているように見える場合を対象としています。HEADリクエストに応答する場合を除いて、サーバーには、エラー状況の説明と、それが一時的または永続的な状態であるかどうかを含むエンティティを含める必要があります。これらのステータスコードは、すべてのリクエストメソッドに適用できます。ユーザーエージェントは、含まれているエンティティをユーザーに表示する必要があります。

エラーメッセージをエンティティとしてHTTP応答の本文に含めることをお勧めします。JSON、プレーンテキスト、フォーマットされたHTML、またはその他の利用したいフォーマットです。

于 2012-12-20T01:33:36.783 に答える
24

本文にエラーの詳細を含めることをお勧めします。さらに、多くの(ほとんど/ほとんどすべて、たとえばWSGI)サーバーとクライアントはエラーコードの名前の変更をサポートしていません-それらを固定ペアとして扱います(たとえば、400は常に「BadRequest」であり「BadRequest-You」ではありませんユーザーIDの指定を忘れた」)。彼らが壊れない場合でも、彼らは特定のエラーコードのあなたの特別な名前を気にしません。

于 2012-12-20T01:31:30.107 に答える
4

エラーは本文に属していません。これはWarningヘッダーに属します。

警告の一般的なHTTPヘッダーには、メッセージのステータスで発生する可能性のある問題に関する情報が含まれています。

参照

于 2018-08-20T17:37:46.943 に答える