30

sales/customers/{customerno} のようなリソースがあります。クライアントがこのリソースに PUT リクエストを送信すると、エンティティ本体の xml が有効な xml でない場合、400 - Bad request が返されます。しかし、xml は有効であるが、xml の内容が有効でない場合はどうなるでしょうか。たとえば、クライアントが顧客の PostCode を更新しようとしていて、無効な PostCode を提供しているとします。この場合、400 - Bad request を返すのは正しいですか、それとも別の http コードを使用する必要がありましたか?

4

2 に答える 2

35

ウィキペディアのHTTPステータスコードのリストから:

400不正な要求: 構文が不正なため、要求を実行できません。

この場合、クライアントから、無効な構文の形式である無効な郵便番号を含むXMLペイロードが送信されました。したがって、400 Bad Requestを送信することは、この状況で返される適切なエラーコードです。

さらに、ウィキペディアはこのトピックに関するリソースとしてRFC-4918を引用しています。このドキュメントから、次の情報を見つけることができます。

サーバーは、たとえば、400(Bad Request)ステータスコードと問題を説明するオプションの応答本文を使用して、疑わしい要求を拒否する場合があります(整形式のXMLで構成されている場合でも)。

リクエストは整形式であるため(XMLは悪くないため、意味的に正しくない情報が含まれているだけです)、ステータスコード400のコンテンツを拒否できます。この単語*may*は他のオプションがあることを示しています。

ステータスコード422を使用したくなるかもしれませんが、無効な郵便番号がセマンティックエラーであるという基準を満たしていないため、この状況では正しくありません。以下をお読みください...

ウィキペディアから:

422 Unprocessable Entity(WebDAV; RFC 4918):要求は整形式でしたが、セマンティックエラーのために実行できませんでした。

さらに、ステータスコード422の解釈を支援するためのいくつかの定義を次に示します

  • 構文エラーは、入力コードの解析中に発生し、文法的に正しくないステートメントが原因で発生します。典型的なエラーは、入力の不正な文字、欠落した演算子、連続した2つの演算子、セミコロンが介在しない同じ行の2つのステートメント、不均衡な括弧、誤った予約語などです。

  • セマンティックエラーは、コードが文法的に正しいものとして解析された後、コードの実行中に発生します。これらは、ステートメントがどのように構築されるかではなく、それらが何を意味するかと関係があります。誤った変数のタイプまたはサイズ、存在しない変数、範囲外の添え字などは、セマンティックエラーです。

無効な郵便番号は、構文エラーでも意味エラーでもありません。したがって、オプションとしてステータスコード422を除外することは合理的です。

あなたの質問に答えるには、ステータスコード400が適切です。ただし、他のオプションもある場合があります。

于 2012-06-01T08:56:24.683 に答える
17

ここにある HTTP 仕様の改訂版では、400 が不正なリクエストに限定されているという混乱を避けるために文言が更新されています。

7.4.1. 400不正な要求

クライアント エラー (不正な構文など) が原因で、サーバーが要求を処理できないか、処理しません。

于 2012-06-01T11:20:18.110 に答える