【转】WCF Data Service 使用小结 (一)—— 了解OData协议
最近做了一個(gè)小項(xiàng)目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的。關(guān)于WCF Data Service,博客園里的介紹并不多,但它確實(shí)是個(gè)很好的框架。可以很方便地通HTTP來(lái)訪問(wèn)數(shù)據(jù)庫(kù),如果你是做富客戶(hù)端開(kāi)發(fā)的,用它絕對(duì)能大大減少你的工作量。出于對(duì)這個(gè)框架的喜愛(ài),于是把自己的一些使用經(jīng)驗(yàn)寫(xiě)下來(lái),并且希望有更多的人能夠用上。
OData簡(jiǎn)介
說(shuō)起 WCF Data Service ,不得不說(shuō)的是 OData。對(duì)于一個(gè)標(biāo)準(zhǔn)的 Web 服務(wù),它往往會(huì)提供了一些功能,比如說(shuō):訂貨、退貨這些,然后使用者通過(guò)HTTP協(xié)議來(lái)使用這些功能。這是面向服務(wù)的基本思想,然而面前服務(wù)有一些缺點(diǎn),很多時(shí)候,沒(méi)法準(zhǔn)確預(yù)測(cè)到用戶(hù)需要什么。因此總是要不斷地增加新的接口,不斷地修改返回的對(duì)象。
另一種方法是所謂的資源為導(dǎo)向的架構(gòu)(ROA),暴露Web服務(wù)的資源,并且用戶(hù)能夠?qū)Ω鞣N對(duì)資源進(jìn)行實(shí)時(shí)的查詢(xún),具有表現(xiàn)數(shù)據(jù)和整合數(shù)據(jù)的能力。類(lèi)似于使用 SQL 在數(shù)據(jù)庫(kù)中查詢(xún)數(shù)據(jù)。唯一的區(qū)別是,ROA你通過(guò)URL創(chuàng)建查詢(xún)。
OData是一個(gè)協(xié)議,規(guī)定公開(kāi)數(shù)據(jù)的Web服務(wù)的特點(diǎn)。下面這段話是OData的定義
Open Data Protocol (開(kāi)放數(shù)據(jù)協(xié)議,OData)是用來(lái)查詢(xún)和更新數(shù)據(jù)的一種Web協(xié)議,其提供了把存在于應(yīng)用程序中的數(shù)據(jù)暴露出來(lái)的方式。OData運(yùn)用且構(gòu)建于很多 Web技術(shù)之上,比如HTTP、Atom Publishing Protocol(AtomPub)和JSON,提供了從各種應(yīng)用程序、服務(wù)和存儲(chǔ)庫(kù)中訪問(wèn)信息的能力。OData被用來(lái)從各種數(shù)據(jù)源中暴露和訪問(wèn)信息, 這些數(shù)據(jù)源包括但不限于:關(guān)系數(shù)據(jù)庫(kù)、文件系統(tǒng)、內(nèi)容管理系統(tǒng)和傳統(tǒng)Web站點(diǎn)。
OData協(xié)議概述
正如上面所提到的,OData服務(wù)通過(guò)Web服務(wù)來(lái)透露所提供的資源。然后您可以通過(guò)URL訪問(wèn)這些資源。 OData 協(xié)議指明了如何通過(guò)HTTP來(lái)查詢(xún)數(shù)據(jù)。基本原則是,你可以輸入某些帶參數(shù)的 URL 來(lái)對(duì)資源進(jìn)行查詢(xún)。
下面是一些你可以使用的 OData 公共服務(wù),更多可以使用的 OData 服務(wù),你可以通過(guò)訪問(wèn) OData 的官網(wǎng)來(lái)獲得。
- http://services.odata.org/WebSite/OData.svc/
- http://services.odata.org/OData/OData.svc/
- http://services.odata.org/Northwind/Northwind.svc/
在介紹使用 OData 協(xié)議進(jìn)行查詢(xún)時(shí),將會(huì)使用這些公開(kāi)的 OData 服務(wù)。下面以?http://services.odata.org/Northwind/Northwind.svc/
??為例,在瀏覽器中輸入剛網(wǎng)址,你將會(huì)看到
從上圖中你可以看到該服務(wù)提供了 Products、Advertisements、Categories、Suppliers 這些資源。通過(guò)輸入下面這些 URL 即可對(duì)這些資源進(jìn)行訪問(wèn)。例如:
- http://services.odata.org/Northwind/Northwind.svc/Products
- http://services.odata.org/Northwind/Northwind.svc/Categories
- http://services.odata.org/Northwind/Northwind.svc/Suppliers
這些查詢(xún),將會(huì)返回該資源的所有基于?XML-Atom 格式的數(shù)據(jù)。例如下圖是 Products 的數(shù)據(jù)。
格式輸出的數(shù)據(jù)
默認(rèn)的格式是 XML-Atom,當(dāng)然,你也可以其它格式,當(dāng)前還支持 JSON 格式。只要在URL上添加?$format=json 參數(shù),即可獲得 json 格式的數(shù)據(jù)。
- 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
選取字段
默認(rèn)情況下,是會(huì)返回所有字段的,但很多時(shí)候,你可能只是需要獲取其它的某些字段。例如下面的查詢(xún)中只返回 ID 和 Name 字段。
- http://services.odata.org/Northwind/Northwind.svc/Products?$select=ProductID,ProductName&$format=json
展開(kāi)
很多時(shí)候,我們還需要將關(guān)聯(lián)的導(dǎo)航屬性取出來(lái)。打開(kāi)下面的 URL:http://services.odata.org/Northwind/Northwind.svc/$metadata
從下面這個(gè)圖可以看到,Product 還有 Category、Order_Details、Supplier 三個(gè)導(dǎo)航屬性。
通過(guò) expand 參數(shù),可以把相關(guān)的導(dǎo)航屬性的數(shù)據(jù)一并取出。輸入 http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier
當(dāng)然,你也可以一次展開(kāi)多個(gè)導(dǎo)航屬性,多個(gè)導(dǎo)航屬性之間使用“,”分隔,例如:
ttp://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier,Category
分頁(yè)
通過(guò) $top 和 $skip 參數(shù),可以進(jìn)行分頁(yè)顯示,例如:
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$skip=10&$take=10
過(guò)濾
使用 $filter參數(shù),可以對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,例如:
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&ProductId gt 4
排序
使用 $orderby 參數(shù),可以對(duì)數(shù)據(jù)進(jìn)行排序,例如:
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
?
關(guān)于關(guān)鍵字的詳細(xì)使用,可以參考 OData 官網(wǎng)的文檔。
http://www.odata.org/documentation/odata-v2-documentation/uri-conventions/
?
總結(jié)
以上是生活随笔為你收集整理的【转】WCF Data Service 使用小结 (一)—— 了解OData协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【转】C#实现SM3国密加密
- 下一篇: 索尼PS5沦陷!黑客曝光安全漏洞:给破解