2011-09-14 15 views
1

私は内部企業向けアプリケーションのために穏やかなWebサービスを設計しています.JSONとWebコンテンツの要求をどのようにマージするのが好きですか?穏やかなWebサービスでコンテンツタイプを制御する

ウェブアプリケーションは、すべての適切な企業アプリケーションと同様に、3文字の略語をURLに反映しています。のは、このアプリケーションの「コールサインは」ABCであることを言おうと、ユーザーは我々がメインのHTMLページをそれらを提供したいアプリケーションのルートにアクセスすると、ユーザーは、次のURL

http://servername/abc

でそれにアクセスし、 .jsファイル(jqueryを含む)、css、および画像。その後、jqueryはAJAX呼び出しをサーバーに戻し始めます。

これらの複数のコンテンツタイプを処理する最も良い方法は何ですか?

http://servername/abc(index.htmlの内容を返します)

http://servername/abc/javascript/jquery.js(JSファイルを返す)

http://servername/abc/countries/de(JSONを返す)

私は2つのWebコンテキストにこれを分割すべきか? ajax呼び出しでjquery contentTypeパラメータを使用して、JSON対HTMLを明示的に指定する必要がありますか?

答えて

2

jQuery contentTypeは、実際にはサーバーへのHTTPリクエストのコンテンツタイプヘッダーを設定する単なるパラメータです。あなたのAJAX呼び出しのためにこれらを設定することは常にベストプラクティスです。

追加: もう1つの良い方法は、dataTypeパラメータを指定して、HTTPリクエストで受け入れヘッダーを設定することです。これは、GETリクエストとPOST AJAXリクエストの両方に役立ちます。

ほとんどの場合、Webサービスフレームワーク(Rails、ASP.NET MVC、.NET WCFなど)は、HTTPリクエストのヘッダーを調べ、返されるコンテンツのタイプを決定します。

例: application/jsonをHTTPヘッダーに入れると、WebサービスはHTMLまたはXML応答ではなくJSON応答を返すようになります。

私はHTML/JSON配信のために組織のWebアプリケーションを見ているより良い方法のいくつかのあなたの標準的な経路は、常にすなわち、HTMLページやリソースを提供することです:

http://servername/abc

http://servername/abc/javascript/jquery.js

は、あなたが言った通りに正確に行います。URLのルートは常にだろう/api/で始まる

http://servername/api/abc/countries/de

:あなたのJSON(あるいはXML)応答のために、私は人々が明示的には、応答、すなわちこれらの種類をバック役立つように理解されているルートを作成してご覧ください非html JSON/XMLレスポンスを返すと理解されています

/api/経路がJSON/XMLレスポンスであることを内部的にも外部的にも容易に理解できます。また、インフラストラクチャが存在するときに外部の方法でこれらのメソッドを外部に公開することが容易になります。要求を認証するなどの必要があります。

+1

JQueryのcontentTypeパラメータは、Webサーバーへのデータの投稿(HTTP POST)にのみ使用されます。サーバー(HTTP GET)からJSONデータを要求しようとする場合は、JQueryでdataTypeパラメータを使用する必要があります。これにより、HTTP Acceptヘッダーが設定されます。 –

+0

正解 - 回答に追加 – ericb

+0

私の2セントを追加する:ASP.NET Web APIでは、コンテンツタイプを設定せずにPOST(またはPUTまたはPATCH)を送信すると、モデルのバインディングが(通常の設定で)失敗します。フレームワークは投稿されたコンテンツをどのように逆シリアル化するのかわかりません(ここではこれが受け入れられた答えであり、通常はほとんどの読み込みを受け取ります) - JSONがAPIに投稿された理由は何ですか?脱シリル化) – dotnetguy

1

これを行う良い方法は、標準HTTP Accept Headerを使用することです。あなたのajaxリクエストでは、このヘッダをapplication/jsonに指定し、他のすべてのWebリクエストにはブラウザのacceptヘッダーが含まれます。次に、サーバー側では、Acceptヘッダーを使用して、どのコンテンツを配信するかを判断できます。

JQueryを使用する場合、dataTypeパラメータが "json"に設定されている場合、Acceptヘッダーは自動的にapplication/jsonに設定されます。

関連する問題