8

私の RESTFul API は、JSON でエンコードされたデータのみを応答できます (つまり、すべてのヘッダーに がありますContent-Type: application/json)。AcceptリクエストにJSON を許可しないヘッダーが含まれている場合 (例: )、何を返す必要がありAccept: text/htmlますか? 本文に説明を付けて返すだけ400 Bad Requestでよいですか、それともこの例外のより具体的なステータス コードがありますか?

これは、サポートされていないリクエスト content-typesとは異なることに注意してください。

4

2 に答える 2

11

意味的に正しくしたい場合:

リクエストが HTTP/1.0 の場合:

クライアントは要求されたタイプではない応答を処理できない可能性があるため、406 Not Acceptable を返すのが適切です。

HTTP/1.1 では、これは依然として「正しい」ことですが、例外もあります。

RFC 2616 Sec 10.4.7 より

 Note: HTTP/1.1 servers are allowed to return responses which are
      not acceptable according to the accept headers sent in the
      request. In some cases, this may even be preferable to sending a
      406 response. User agents are encouraged to inspect the headers of
      an incoming response to determine if it is acceptable.

実際、@Jack が述べたように、問題になる可能性はかなり低いです。完全を期すために、この回答のみを含めています。

于 2013-02-22T15:10:38.600 に答える
4

気にしないでください。

cURLPHP を使用している場合やfile_get_contents()、PHP で使用している場合など、サービスの利用者がこのヘッダーを設定する必要がない場合があります。

API ドキュメントに、サービスが JSON 出力のみをサポートすることが記載されている場合は、それで十分です。

拡張機能を使用して、たとえば、JSON と XML のそれぞれに対してフォーマットを適用することもでき/path/to/resource.json?a=bます/path/to/resource.xml?a=b

複数の出力形式をサポートする必要があり、Accept要求ヘッダーの値が決定的でない場合は、デフォルトの出力形式を定義する必要があります。

于 2013-02-21T23:39:40.507 に答える