[轉]訪問 OData 服務 (WCF Data Services)


本文轉自:http://msdn.microsoft.com/zh-SG/library/dd728283(v=vs.103)

 

WCF 數據服務 支持開放式數據協議 (OData) 將數據作為包含可通過 URI 進行尋址的資源的源進行公開。              這些資源按照Entity Data Model的實體關系慣例表示。 在此模型中,實體表示作為應用程序域中數據類型的數據操作單元,如客戶、訂單、項目和產品。 可以通過使用具象狀態傳輸 (REST) 的語義(尤其是標准 HTTP 謂詞 GET、PUT、POST 和 DELETE)訪問和更改實體數據。

對資源進行尋址              

              
            

在 OData 中,您可以通過使用 URI 對數據模型公開的任何數據進行尋址。               例如,下面的 URI 返回一個作為 Customers 實體集的源,該實體集中包含 Customer 實體類型的所有實例的項:

 
http://services.odata.org/Northwind/Northwind.svc/Customers

實體具有稱為實體鍵的特殊屬性。 實體鍵用於在實體集中唯一標識某個實體。 這樣,您可以在實體集中對某種實體類型的特定實例進行尋址。 例如,下面的 URI 返回 Customer 實體類型的具有鍵值 ALFKI 的特定實例的項:

 
http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')

也可以對實體實例的基元屬性和復雜屬性進行單獨尋址。 例如,下面的 URI 返回一個包含特定客戶的 ContactName 屬性值的 XML 元素:

 
http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/ContactName

如果在上面的 URI 中包括 $value 終結點,則只在響應消息中返回基元屬性的值。 下面的示例只返回字符串“Maria Anders”,而不返回 XML 元素:

 
http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/ContactName/$value

實體之間的關系在數據模型中由關聯定義。 通過這些關聯,可以使用實體實例的導航屬性對相關實體進行尋址。 對於多對一的關系,導航屬性可返回單個相關實體;對於一對多的關系,導航屬性可返回一組相關實體。 例如,下面的 URI 返回一個作為與特定客戶相關的所有訂單集的源:

 
http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders

通常為雙向的關系由一對導航屬性表示。 作為對前一示例中所示的關系的反轉,下面的 URI 返回對特定 Order 實體所屬的 Customer 實體的引用:

 
http://services.odata.org/Northwind/Northwind.svc/Orders(10643)/Customer

通過 OData,還可以基於查詢表達式的結果進行資源尋址。 這樣,可以基於計算的表達式對資源集進行篩選。 例如,下面的 URI 對資源進行篩選以僅返回指定客戶自 1997 年 9 月 22 日起已發貨的訂單:

 
http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders?$filter=ShippedDate gt datetime'1997-09-22T00:00:00'

有關更多信息,請參見 OData:URI 約定(可能為英文網頁)。

系統查詢選項              

              
            

OData 定義了一組系統查詢選項,您可以使用這些選項對資源執行傳統的查詢操作,如篩選、排序和分頁。               例如,下面的 URI 返回郵政編碼尾號不是 100 的所有 Order 實體集和相關的 Order_Detail 實體:

 
http://services.odata.org/Northwind/Northwind.svc/Orders?$filter=not endswith(ShipPostalCode,'100')&$expand=Order_Details&$orderby=ShipCity

返回源中的各項還按訂單的 ShipCity 屬性值進行排序。

WCF 數據服務支持下列 OData 系統查詢選項:

 

查詢選項

說明

$orderby

定義用於返回的源中的實體的默認排序順序。 下面的查詢按市/縣對返回的客戶源進行排序:

http://services.odata.org/Northwind/Northwind.svc/Customers?$orderby=Country,City

有關更多信息,請參見 OData: OrderBy 系統查詢選項 ($orderby)(可能為英文網頁)。

$top

指定要包括在返回的源中的實體數。 下面的示例跳過前 10 個客戶,然后返回接下來的 10 個客戶:

http://services.odata.org/Northwind/Northwind.svc/Customers?$skip=10&$top=10

有關更多信息,請參見 OData:Top 系統查詢選項 ($top)(可能為英文網頁)。

$skip

指定開始在源中返回實體前要跳過的實體數。 下面的示例跳過前 10 個客戶,然后返回接下來的 10 個客戶:

http://services.odata.org/Northwind/Northwind.svc/Customers?$skip=10&$top=10

有關更多信息,請參見 OData:Skip 系統查詢選項 ($skip)(可能為英文網頁)。

$filter

定義一個基於特定條件對源中返回的實體進行篩選的表達式。 此查詢選項支持一組用於計算篩選表達式的邏輯比較運算符、算術運算符和預定義查詢函數。 下面示例返回郵政編碼尾號不是 100 的所有訂單:

http://services.odata.org/Northwind/Northwind.svc/Orders?$filter=not endswith(ShipPostalCode,'100')

有關更多信息,請參見 OData:Filter 系統查詢選項 ($filter)(可能為英文網頁)。

$expand

指定由查詢返回哪些相關實體。 相關實體將作為源或內聯項與查詢返回的實體包含在一起。 下面的示例返回客戶“ALFKI”的訂單以及每個訂單的項目詳細信息:

http://services.odata.org/Northwind/Northwind.svc/Customers('ALFKI')/Orders?$expand=Order_Details

有關更多信息,請參見 OData:Expand 系統查詢選項 ($expand)(可能為英文網頁)。

$select

指定一個投影,用於定義在投影中返回的實體的屬性。 默認情況下,在源中返回實體的所有屬性。 下面的查詢僅返回 Customer 實體的三個屬性:

http://services.odata.org/Northwind/Northwind.svc/Customers?$select=CustomerID,CompanyName,City

有關更多信息,請參見 OData:Select 系統查詢選項 ($select)(可能為英文網頁)。

$inlinecount

請求在源中包括源中返回的實體數的計數。 有關更多信息,請參見 OData: Inlinecount 系統查詢選項 ($inlinecount)(可能為英文網頁)。

對關系進行尋址              

              
            

除了對實體集和實體實例進行尋址之外,通過 OData 還可對表示實體間關系的關聯進行尋址。               若要創建或更改兩個實體實例(例如與 Northwind 示例數據庫中指定訂單相關的發貨方)之間的關系,必須使用此功能。 OData 支持 $link 運算符,專用於對實體間的關聯進行尋址。 例如,在 HTTP PUT 請求消息中指定下面的 URI 可將指定訂單的發貨方更改為新發貨方。

 
http://services.odata.org/Northwind/Northwind.svc/Orders(10643)/$links/Shipper

有關更多信息,請參見 OData:對各項之間的鏈接進行尋址(可能為英文網頁)。

使用返回的源              

              
            

使用 OData 資源的 URI 可以對該服務公開的實體數據進行尋址。               在 Web 瀏覽器的地址字段中輸入 URI 時,將以 OData 源表示形式返回請求的資源。 有關更多信息,請參見 WCF 數據服務快速入門盡管可以使用 Web 瀏覽器測試某個數據服務資源能否返回預期的數據,但是生產數據服務(這些服務也可創建、更新和刪除數據)通常由應用程序代碼或網頁中的腳本編寫語言訪問。 有關更多信息,請參見在客戶端應用程序中使用 OData 服務 (WCF Data Services)

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com