最近作了一個小項目,其中用到了 WCF Data Service,以前是叫 ADO.NET Data Service 的。關於WCF Data Service,博客園裏的介紹並很少,但它確實是個很好的框架。能夠很方便地通HTTP來訪問數據庫,若是你是作富客戶端開發的,用它絕對能大大減小你的工做量。出於對這個框架的喜好,因而把本身的一些使用經驗寫下來,而且但願有更多的人可以用上。數據庫
提及 WCF Data Service ,不得不說的是 OData。對於一個標準的 Web 服務,它每每會提供了一些功能,好比說:定貨、退貨這些,而後使用者經過HTTP協議來使用這些功能。這是面向服務的基本思想,然而面前服務有一些缺點,不少時候,無法準確預測到用戶須要什麼。所以老是要不斷地增長新的接口,不斷地修改返回的對象。json
另外一種方法是所謂的資源爲導向的架構(ROA),暴露Web服務的資源,而且用戶可以對各類對資源進行實時的查詢,具備表現數據和整合數據的能力。相似於使用 SQL 在數據庫中查詢數據。惟一的區別是,ROA你經過URL建立查詢。瀏覽器
OData是一個協議,規定公開數據的Web服務的特色。下面這段話是OData的定義架構
Open Data Protocol (開放數據協議,OData)是用來查詢和更新數據的一種Web協議,其提供了把存在於應用程序中的數據暴露出來的方式。OData運用且構建於不少 Web技術之上,好比HTTP、Atom Publishing Protocol(AtomPub)和JSON,提供了從各類應用程序、服務和存儲庫中訪問信息的能力。OData被用來從各類數據源中暴露和訪問信息, 這些數據源包括但不限於:關係數據庫、文件系統、內容管理系統和傳統Web站點。框架
正如上面所提到的,OData服務經過Web服務來透露所提供的資源。而後您能夠經過URL訪問這些資源。 OData 協議指明瞭如何經過HTTP來查詢數據。基本原則是,你能夠輸入某些帶參數的 URL 來對資源進行查詢。spa
下面是一些你可使用的 OData 公共服務,更多可使用的 OData 服務,你能夠經過訪問 OData 的官網來得到。orm
在介紹使用 OData 協議進行查詢時,將會使用這些公開的 OData 服務。下面以 http://services.odata.org/Northwind/Northwind.svc/對象
爲例,在瀏覽器中輸入剛網址,你將會看到blog
從上圖中你能夠看到該服務提供了 Products、Advertisements、Categories、Suppliers 這些資源。經過輸入下面這些 URL 便可對這些資源進行訪問。例如:排序
這些查詢,將會返回該資源的全部基於 XML-Atom 格式的數據。例以下圖是 Products 的數據。
默認的格式是 XML-Atom,固然,你也能夠其它格式,當前還支持 JSON 格式。只要在URL上添加 $format=json 參數,便可得到 json 格式的數據。
默認狀況下,是會返回全部字段的,但不少時候,你可能只是須要獲取其它的某些字段。例以下面的查詢中只返回 ID 和 Name 字段。
不少時候,咱們還須要將關聯的導航屬性取出來。打開下面的 URL:http://services.odata.org/Northwind/Northwind.svc/$metadata
從下面這個圖能夠看到,Product 還有 Category、Order_Details、Supplier 三個導航屬性。
經過 expand 參數,能夠把相關的導航屬性的數據一併取出。輸入 http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier
固然,你也能夠一次展開多個導航屬性,多個導航屬性之間使用「,」分隔,例如:
ttp://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier,Category
經過 $top 和 $skip 參數,能夠進行分頁顯示,例如:
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$skip=10&$take=10
使用 $filter參數,能夠對數據進行過濾,例如:
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&ProductId gt 4
使用 $orderby 參數,能夠對數據進行排序,例如:
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product
升序
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product asc
降序
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product desc
關於關鍵字的詳細使用,能夠參考 OData 官網的文檔。
http://www.odata.org/documentation/odata-v2-documentation/uri-conventions/