web-dev-qa-db-ja.com

RESTfulサービスは、リクエストヘッダーに応じて、同じリソースに対してJSONとXMLの両方を返すことができますか?

現在、オブジェクトのJSON表現を返す単純なRESTfulメソッドがあります。

私の質問は、アーキテクチャの観点からのものであり、完全に技術的なものではありません。

RESTfulサービスは、JSONとXMLの両方を同時に返すように設計する必要がありますか?

私の知る限り、これは悪い習慣であり、これには個別のリソースを定義する必要があります。 1つのリソースはJSONデータと他の1つのXMLを返す必要があります。

私はそれを正しく考えていますか?

5
Nital

同じリソースがリクエストに応じてXMLまたはJSONのいずれかを返す場合がありますが、両方を同時に返すことはできません。リクエストに基づいてどちらを返すかがわかるので、両方を生成する必要はありません。返すものを生成するだけです。

どちらを返すかを決める方法は次のとおりです。順番に評価し、返す形式を決定したら停止します。

  1. リソースに拡張機能が追加されている場合(GET /user/1234.jsonまたはGET /user/1234.xml)、要求された形式としてそれを使用します。
  2. Acceptヘッダーが設定されている場合は、そのヘッダーの値を要求された形式として使用します。
  3. (POSTの場合のように)リクエスト本文があり、Content-TypeヘッダーがJSONまたはXMLを指定している場合は、それを使用します。
  4. 上記のいずれにも当てはまらない場合は、デフォルトの形式を使用します(通常、顧客が引き続きXMLを使用している場合を除き、デフォルトとしてJSONを使用します)。
21
Mike Dunker

いいえ。リソースを表現する方法は、クライアントが期待するものによって定義する必要があります(クライアントが受け入れる表現を示すhttpヘッダーがあります)。つまり、サーバーは、現在のクライアントが受け入れる表現を確認し、この表現で応答を送信する必要があります(または、そのメディアタイプでリソースを表現できないという応答を送信する必要があります)。

2