2013-02-21 10 views
5

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

unsupported request content-typesとは異なります。

答えて

3

気にしないでください。

サービスの消費者がこのヘッダーを設定することを嫌うケースがあります。 PHPでcURLまたはfile_get_contents()を使用している場合。

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

拡張機能を使用して、フォーマットを強制することもできます(例: JSONとXMLの場合はそれぞれ/path/to/resource.json?a=bまたは/path/to/resource.xml?a=bです。

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

+1

だから、あなたは 'Content-Type:application/json'を使って通常の応答を返すと言っていますか? –

+1

@AttilaO。肯定的:) –

+0

それは十分簡単です。一方、APIがJSONと何か他のものをサポートしているとしたら、Bencode( 'application/x-bencode')と言っても、要求は何か3番目に指定されています、' Accept:text/xml'ですか? (私はこれが私の元の質問の一部ではないことを知っています。) –

9

あなたは意味的に正しいようにしたい場合:

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

406許容できないクライアントが応答を処理することができないかもしれないとして、返すために正しいものですそれは要求されたタイプではありません。 HTTP/1.1の

、それはまだやるための "正しい" ことだが、例外もありますが、真実はRFC 2616から

秒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が言及したようにかなり低いです。私は完全性のためにこの答えだけを含んでいます。

関連する問題