第一季的鏈接以及系列導(dǎo)航:http://m.survivalescaperooms.com/fzrain/p/3490137.html
在這里,首先要感謝Taiseer Joudeh不斷的為我們帶來最新的技術(shù)分享,樓主對(duì)web api這種技術(shù)可謂是非常的喜歡,同時(shí)也得到很多園友的支持,所以繼續(xù)是必然的。經(jīng)過上一階段的學(xué)習(xí),我們對(duì)于web api應(yīng)該已經(jīng)不是很陌生了,從本篇開始將開始介紹OData。我也是剛開始學(xué),因此把學(xué)習(xí)過程記錄下來并分享給大家,期待一起交流進(jìn)步。
在本次系列中,我們將沿用第一季的項(xiàng)目背景來構(gòu)建一個(gè)OData服務(wù),本文將用一個(gè)簡單的例子幫大家來認(rèn)識(shí)OData,在介紹例子之前我們先介紹一下OData的定義和約定。
Open Data PRotocol (開放數(shù)據(jù)協(xié)議,OData)是用來查詢和更新數(shù)據(jù)的一種Web協(xié)議,其提供了把存在于應(yīng)用程序中的數(shù)據(jù)暴露出來的方式。OData運(yùn)用且構(gòu)建于很多 Web技術(shù)之上,比如HTTP、Atom Publishing Protocol(AtomPub)和JSON,提供了從各種應(yīng)用程序、服務(wù)和存儲(chǔ)庫中訪問信息的能力。OData被用來從各種數(shù)據(jù)源中暴露和訪問信息, 這些數(shù)據(jù)源包括但不限于:關(guān)系數(shù)據(jù)庫、文件系統(tǒng)、內(nèi)容管理系統(tǒng)和傳統(tǒng)Web站點(diǎn)。
我們知道,構(gòu)建符合REST原則的服務(wù)應(yīng)該具備一下特點(diǎn):
1.每一個(gè)資源都由一個(gè)唯一的URI來標(biāo)識(shí)。
2.通過HTTP方法(GET, POST, PUT, and DELETE)來實(shí)現(xiàn)對(duì)資源的CRUD。
3.能根據(jù)客戶端指定的格式來返回?cái)?shù)據(jù):xml,JSON等。

在我們開始創(chuàng)建OData服務(wù)之前,為了讓大家對(duì)OData有一個(gè)更深入的理解,在這里我們將查詢一個(gè)已經(jīng)存在的OData服務(wù)(使用的是Northwind數(shù)據(jù)庫),對(duì)應(yīng)的基地址是:http://services.odata.org/Northwind/Northwind.svc。你可以使用任何REST客戶端(例如fiddler,PostMan)。當(dāng)然如果只是做查詢操作,你也可以直接使用瀏覽器。
下表列舉了一些常用的Odata操作:
|           操作  |                   URL  |                   說明  |      
| $filter | http://services.odata.org/Northwind/Northwind.svc/Products?$filter=ProductName eq 'Tofu' | 根據(jù)表達(dá)式的狀態(tài)返回結(jié)果(返回ProductName 等于Tofu的Products) | 
| $orderby | http://services.odata.org/Northwind/Northwind.svc/Products?$orderby=ProductName | 根據(jù)結(jié)果排序(根據(jù)ProductName列排序) | 
| $skip | http://services.odata.org/Northwind/Northwind.svc/Products?$skip=10 | 越過結(jié)果中的n條數(shù)據(jù),常用于分頁 | 
| $top | http://services.odata.org/Northwind/Northwind.svc/Products?$top=10 | 返回結(jié)果中的前n條記錄,常用于分頁 | 
| $select | http://services.odata.org/Northwind/Northwind.svc/Products?$filter=ProductName eq 'Tofu'&$select=ProductName,UnitPrice | 選擇需要返回的屬性 | 
| $expand | http://services.odata.org/Northwind/Northwind.svc/Products?$expand=Supplier | 返回Products中包含的導(dǎo)航屬性(關(guān)聯(lián)屬性)Supplier | 
| $inlinecount | http://services.odata.org/Northwind/Northwind.svc/Products?$inlinecount=allpages | 向服務(wù)器獲取符合條件的資源總數(shù)(分頁的total值) | 
通過上面表格的內(nèi)容,我們還可以通過組合查詢條件來實(shí)現(xiàn)復(fù)雜的查詢(例如:我們想實(shí)現(xiàn)服務(wù)器端的分頁,那么我們就可以使用如下的URI:http://services.odata.org/Northwind/Northwind.svc/Products?$top=10&$skip=0&$orderby=ProductName&$inlinecount=allpages)。在上面的URI中,$skip代表跳過的數(shù)據(jù),通常指pageSize*pageIndex,同時(shí)$inlinecount返回一個(gè)int值代表記錄總數(shù)。
OData服務(wù)支持內(nèi)容的選擇,也就是說客戶端可以通過設(shè)置請(qǐng)求頭Accept header來定制響應(yīng)數(shù)據(jù)的格式,每種格式都有各自的優(yōu)缺點(diǎn),下表就說明了彼此的不同之處:
|           XML  |                   JSON(詳細(xì)版)  |                   JSON(輕量版)  |      |
| OData版本 | 版本1,2,3 | 版本1,2,3 | 版本3 | 
| 元數(shù)據(jù)及超鏈接 | 包含數(shù)據(jù)和元數(shù)據(jù) | 包含數(shù)據(jù)和元數(shù)據(jù) | 僅包含數(shù)據(jù) | 
| 數(shù)據(jù)大小 | 28.67 KBs | 14.34 KBs, 小了近50% | 4.25 KBs, 小了近75% | 
| 對(duì)于移動(dòng)客戶端消費(fèi)是否簡單 | 否 | 是 | 是 | 
| Accept Header | application/atom+xml | application/json;odata=verbose | application/json | 
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注