2011-09-14 67 views
1

我正在爲內部企業應用程序設計Restful Web服務,並且很好奇如何合併JSON和「Web內容」請求。在Restful Web服務中控制內容類型

Web應用程序與所有優秀的企業應用程序一樣,具有反映在URL中的三字母縮寫。比方說,這個應用程序的「呼號」是ABC,以及用戶通過以下網址

http://servername/abc

訪問當用戶訪問我們要爲他們服務了主HTML頁面的應用程序的根, .js文件(包括jquery),css和圖像。然後,jquery將開始將AJAX調用回服務器。

處理這些多種內容類型的最佳方法是什麼?

http://servername/abc(的index.html回報內容)

http://servername/abc/javascript/jquery.js(返回一個js文件)

http://servername/abc/countries/de(返回JSON)

我應該分成兩個網絡環境呢?我應該在ajax調用中使用jquery contentType參數來顯式指定JSON還是其他的東西?

回答

2

jQuery contentType實際上只是一個參數,用於將HTTP請求中的內容類型標頭設置爲服務器。爲您的AJAX調用設置這些始終是最佳做法。

添加: 另一個好的做法是指定dataType參數,因爲它將在您的HTTP請求上設置accept標頭。這對於GET和POST AJAX請求都很有用。

大多數(如果不是全部的話)Web服務框架(Rails,ASP.NET MVC,.NET WCF等)都能夠檢查HTTP請求的標頭並確定要回送哪種類型的內容

例如:

例如: application/json在HTTP頭中會讓您的web服務知道返回JSON響應而不是HTML或XML響應。

一些我見過舉辦HTML/JSON服務就是讓你的標準路線始終爲你的HTML頁面和資源,即Web應用程序的更好的方法:

http://servername/abc

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

將按照您的說法完成。爲了您的JSON(甚至XML)的反應,我看到鄉親們創建一個路由被明確瞭解服務回那些類型的響應,即:

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

的URL路徑始於一個/api/這將永遠是理解爲提供非html JSON/XML響應

這使得您的公司很容易在內部和外部理解/api/路由是您的JSON/XML響應。如果您希望將這些方法作爲基礎架構存在,那麼它還可以更容易地將這些方法公開給外部客戶,您只需要對請求進行身份驗證等。

+1

JQuery中的contentType參數僅用於將數據發佈到Web服務器(HTTP POST)。如果您試圖從服務器請求JSON數據(HTTP GET),則必須在JQuery中使用dataType參數,該參數將設置HTTP Accept標頭。 –

+0

正確 - 已添加到答案 – ericb

+0

添加我的2美分:在ASP.NET Web API中,如果發送POST(或PUT或PATCH)而未設置內容類型,則模型綁定將失敗(在典型設置中)框架不知道如何反序列化發佈的內容(因爲這是公認的答案,並且通常會收到大部分的讀取 - 我花了很多時間弄清楚爲什麼JSON發佈到我的API上會導致失敗desirialized) – dotnetguy

1

一個好的方法是使用標準的HTTP Accept Header。在你的ajax請求中,你可以指定這個頭文件爲application/json,然後所有其他的web請求都會包含瀏覽器的accept頭文件。然後,在服務器端,您可以使用Accept標頭確定要提供哪些內容。

如果您使用JQuery,那麼如果您的dataType參數設置爲「json」,則Accept標頭將自動設置爲application/json。