WCF Data Service 使用小結 (一)—— 瞭解OData協議

麥舒發表於2013-07-03

最近做了一個小專案,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的。關於WCF Data Service,部落格園裡的介紹並不多,但它確實是個很好的框架。可以很方便地通HTTP來訪問資料庫,如果你是做富客戶端開發的,用它絕對能大大減少你的工作量。出於對這個框架的喜愛,於是把自己的一些使用經驗寫下來,並且希望有更多的人能夠用上。

OData簡介

說起 WCF Data Service ,不得不說的是 OData。對於一個標準的 Web 服務,它往往會提供了一些功能,比如說:訂貨、退貨這些,然後使用者通過HTTP協議來使用這些功能。這是面向服務的基本思想,然而面前服務有一些缺點,很多時候,沒法準確預測到使用者需要什麼。因此總是要不斷地增加新的介面,不斷地修改返回的物件。

另一種方法是所謂的資源為導向的架構(ROA),暴露Web服務的資源,並且使用者能夠對各種對資源進行實時的查詢,具有表現資料和整合資料的能力。類似於使用 SQL 在資料庫中查詢資料。唯一的區別是,ROA你通過URL建立查詢。

OData是一個協議,規定公開資料的Web服務的特點。下面這段話是OData的定義

Open Data Protocol (開放資料協議,OData)是用來查詢和更新資料的一種Web協議,其提供了把存在於應用程式中的資料暴露出來的方式。OData運用且構建於很多 Web技術之上,比如HTTP、Atom Publishing Protocol(AtomPub)和JSON,提供了從各種應用程式、服務和儲存庫中訪問資訊的能力。OData被用來從各種資料來源中暴露和訪問資訊, 這些資料來源包括但不限於:關聯式資料庫、檔案系統、內容管理系統和傳統Web站點。

OData協議概述

正如上面所提到的,OData服務通過Web服務來透露所提供的資源。然後您可以通過URL訪問這些資源。 OData 協議指明瞭如何通過HTTP來查詢資料。基本原則是,你可以輸入某些帶引數的 URL 來對資源進行查詢。

下面是一些你可以使用的 OData 公共服務,更多可以使用的 OData 服務,你可以通過訪問 OData 的官網來獲得。

  • http://services.odata.org/WebSite/OData.svc/
  • http://services.odata.org/OData/OData.svc/
  • http://services.odata.org/Northwind/Northwind.svc/

在介紹使用 OData 協議進行查詢時,將會使用這些公開的 OData 服務。下面以 http://services.odata.org/Northwind/Northwind.svc/

  為例,在瀏覽器中輸入剛網址,你將會看到

從上圖中你可以看到該服務提供了 Products、Advertisements、Categories、Suppliers 這些資源。通過輸入下面這些 URL 即可對這些資源進行訪問。例如:

  • http://services.odata.org/Northwind/Northwind.svc/Products
  • http://services.odata.org/Northwind/Northwind.svc/Categories
  • http://services.odata.org/Northwind/Northwind.svc/Suppliers

這些查詢,將會返回該資源的所有基於 XML-Atom 格式的資料。例如下圖是 Products 的資料。

格式輸出的資料

預設的格式是 XML-Atom,當然,你也可以其它格式,當前還支援 JSON 格式。只要在URL上新增 $format=json 引數,即可獲得 json 格式的資料。

  • http://services.odata.org/Northwind/Northwind.svc/Products?$format=json
  • http://services.odata.org/Northwind/Northwind.svc/Categories?$format=json
  • http://services.odata.org/Northwind/Northwind.svc/Suppliers?$format=json

選取欄位  

預設情況下,是會返回所有欄位的,但很多時候,你可能只是需要獲取其它的某些欄位。例如下面的查詢中只返回 ID 和 Name 欄位。

  • http://services.odata.org/Northwind/Northwind.svc/Products?$select=ProductID,ProductName&$format=json

展開

很多時候,我們還需要將關聯的導航屬性取出來。開啟下面的 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/

 

 

 

相關文章