OData

在 PDC09 期間惧互,Microsoft WCF 數(shù)據(jù)服務團隊(以前稱為 ADO.NET 數(shù)據(jù)服務團隊)首次推出 OData,即開放數(shù)據(jù)協(xié)議蛾方。這一消息是在會議第二天的主題演講中宣布的夹供,但實際上 OData 早就開始了袭厂。自從 Microsoft .NET Framework 3.5 SP1 中提供 ADO.NET 數(shù)據(jù)服務以來,熟悉 ADO.NET 數(shù)據(jù)服務的用戶已經(jīng)使用 OData 作為數(shù)據(jù)傳輸協(xié)議開發(fā)基于資源的應用程序媳纬。本文將介紹富 Internet 應用程序 (RIA) 的開發(fā)人員如何使用 OData 以及使用 OData 的優(yōu)勢双肤。

開放數(shù)據(jù)協(xié)議(Open Data Protocol施掏,簡稱OData),是一種描述怎么創(chuàng)建和訪問Restful服務的oasis標準茅糜。

1七芭、協(xié)議的組成部分?

答:① 核心協(xié)議:主要定義了開放數(shù)據(jù)協(xié)議的核心語義和行為限匣; ② URL規(guī)范:URL規(guī)范主要定義了一系列推薦(非強制)采用的構建用于訪問OData服務中的數(shù)據(jù)和模型的URL的規(guī)則抖苦; ③ 通用格式定義語言(CSDL):OData服務的數(shù)據(jù)模型是通過EDM(實體數(shù)據(jù)模型)來定義的。通用格式定義語言(Common Schema Definition Language (CSDL))定義了OData服務的EDM模型的一種XML格式的表現(xiàn)形式米死; ④ 擴展的巴科斯范式(ABNF):ABNF定義了構建OData請求和響應URL的巴科斯范式锌历。 oData是一個協(xié)議標準,我們只需要按照這個協(xié)議或者標準生產(chǎn)組件峦筒,那么這個組件就可以方便的和其他組件集成協(xié)作究西。

2、什么是restful物喷?

答:【restful】是一種網(wǎng)絡應用程序的設計風格和開發(fā)方式卤材,基于http,可以使用xml格式定義或者Json格式定義峦失。 【restful】適用于移動互聯(lián)網(wǎng)廠商作為業(yè)務使用接口的場景扇丛。實現(xiàn)第三方ott調(diào)用移動互聯(lián)網(wǎng)資源的功能,動作類型為增刪改所調(diào)用的資源尉辑。

OData 生態(tài)系統(tǒng)

該協(xié)議定義了可以操作的資源和方法帆精,以及可以對這些資源執(zhí)行的操作(GET、PUT隧魄、POST卓练、MERGE 和 DELETE巩趁,分別對應著讀取钥庇、創(chuàng)建、替換寝凌、合并和刪除)狮含。

OData 的長期目標是為每種主流技術顽悼、編程語言和平臺都打造一個 OData 客戶端庫,以便每個客戶端應用程序都可以使用豐富的 OData 源几迄。OData 的生產(chǎn)者和使用者共同構成了 OData“生態(tài)系統(tǒng)”表蝙。

3、oData與restful是什么關系乓旗?

答:現(xiàn)在我們了解到了府蛇,restful是一個前端與后端交互的應用協(xié)議,而oData是restful實現(xiàn)的一種方式屿愚。

SharePoint 站點的服務文檔

OData URI 約定

服務文檔列出了服務提供的實體集汇跨。請記住务荆,您可以使用強大的 URI 語法(是 OData 協(xié)議的可選部分)來訪問此服務中的資源。讓我們快速了解一下此服務的 URI 語法穷遂。若要訪問每個實體集的源函匕,您需要將實體集的名稱附加到服務的基本 URI 中,例如 http://myhost/Listings.svc/Properties 將指向 Properties 實體集中的一組實體蚪黑。

還可以使用單個實體的鍵值來指向該實體盅惜,例如 URI http://myhost/ Listings.svc/Properties(0) 將指向 ID = 0 的房產(chǎn)。您可以將關系名稱附加到 URI 末尾忌穿,以指向此實體與其他實體或實體集的關系抒寂,因此 http://myhost/ Listings.svc/Properties(0)/Listings 將指向與 ID = 0 的房產(chǎn)實體相關的一組銷售清單。使用此語法掠剑,可以瀏覽關系的很多層級屈芜。

URI 還定義了很多可以附加到 URI 的查詢選項,以便在一定程度上修改基本查詢朴译,其中每個查詢選項都定義為名稱/值對井佑。例如,附加查詢選項 $top=10 后眠寿,就將查詢限制為僅包含結果中的前 10 個實體躬翁。圖 4 列出了 URI 語法中所有可用的查詢選項。

$top=n 將查詢限制為前 n 個實體盯拱。
$skip=n 跳過集中的前 n 個實體盒发。
$inlinecount=allpages 在結果中包含集中所有實體的計數(shù)。
$filter=<表達式> 可以用表達式限制查詢返回的結果(例如:$filter=Status eq 'Available' 將結果限制為具有 Status 屬性且此屬性值為 Available 的實體)坟乾。
$orderby=<表達式> 按照實體的一組屬性對結果進行排序
$select=<表達式> 指定要返回的實體的屬性子集迹辐。
$format 指定要返回的源的格式(ATOM 或 JSON)蝶防。此選項在 WCF 數(shù)據(jù)服務中不受支持甚侣。

從 SharePoint 提供數(shù)據(jù)

在前述部分中,我為您展示了如何提供關系數(shù)據(jù)庫中存儲的數(shù)據(jù)间学,以及房地產(chǎn)網(wǎng)站的房產(chǎn)和銷售清單信息殷费。讓我們假設我還有負責出售房產(chǎn)的代理人信息,但這些數(shù)據(jù)存儲在 SharePoint 站點中低葫。Microsoft SharePoint 2010 提供了相應功能详羡,可以將所有列表和列表中的文檔作為 OData 源提供。這非常適合該房地產(chǎn)網(wǎng)站嘿悬,因為這意味著該公司員工輸入的代理人信息可作為 OData 源使用实柠,可以包含在我構建的銷售清單應用程序中。使用 SharePoint 接口負責輸入和更新此數(shù)據(jù)的用戶不必更改其工作流程來適應我的應用程序善涨。輸入到公司 SharePoint 站點的數(shù)據(jù)在即將創(chuàng)建的 Listings 應用程序中實時可用窒盐。

在 SharePoint 系統(tǒng)中安裝適用于 .NET Framework 3.5 SP1 的 ADO.NET 數(shù)據(jù)服務更新后草则,對于每個將清單數(shù)據(jù)作為 OData 源提供的站點來說,將有一個新的 HTTP 端點可以使用蟹漓。由于 OData 源要使用 HTTP 進行訪問炕横,因此使用 Internet Explorer 即可查看。圖 6 顯示了 SharePoint 中代理人清單的源葡粒。

https://www.odata.org/getting-started/basic-tutorial/#filter

OData常用操作:

操作 URL 說明
****$filter**** http://localhost:8090/api/Meetings?$filter=ProductName eq 'Tofu' 根據(jù)表達式的狀態(tài)返回結果(返回ProductName 等于Tofu的Products)
****$orderby**** http://localhost:8090/api/Meetings?$orderby=ProductName 根據(jù)結果排序(根據(jù)ProductName列排序)
****$skip**** http://localhost:8090/api/Meetings?$skip=10 越過結果中的n條數(shù)據(jù)份殿,常用于分頁
****$top**** http://localhost:8090/api/Meetings?$top=10 返回結果中的前n條記錄,常用于分頁
****$select**** http://localhost:8090/api/Meetings?filter=ProductName eq 'Tofu'&select=ProductName,UnitPrice 選擇需要返回的屬性
****$expand**** http://localhost:8090/api/Meetings?$expand=Supplier 返回Products中包含的導航屬性(關聯(lián)屬性)Supplier
****$inlinecount**** http://localhost:8090/api/Meetings?$inlinecount=allpages 向服務器獲取符合條件的資源總數(shù)(分頁的total值)

函數(shù)操作:

contains(包含)

$filter=contains(Name,'sap') Name中包含”sap”的所有信息嗽交,這樣就達到了模糊查詢的效果卿嘲,只輸入其中的幾個字符便可查到所有包含這幾個字符的信息;

not contains(不包含)

$filter=not contains(Name,'sap') Name中不包含”sap”的所有信息轮纫,與contains效果相反;

startswith(以xx****開頭)

$filter=startswith(Name, 'sap') Name以”sap”開頭的所有信息;

endswith(以xx****結尾)

$filter=endswith(Name, 'sap') Name以”sap”結尾的所有信息;

length(字符長度)

$filter=length(Name) eq 10 Name中字符長度等于10的所有信息;

indexof(字符長度等于x****索引為n開始包含xx字符)

$filter=indexof(Name, 'sap') eq 10 Name從第11個字母開始包含”sap”的所有信息;

replace(替換)

$filter=replace(Name, 'a', 'p') eq 'sap' Name等于”sap”的信息中”a”被”p”替換;

substring(從第n個字符開始)

filter=substring(Name, 1) eq 'sap' Name從第2個字符開始是”sap”的所有信息filter=substring(Name, 1, 2) eq 'sa' Name的第2個和第3個字符是”sa”的所有信息;

tolower(轉換為小寫)

$filter=tolower(Name) eq 'SAP' Name等于”SAP”的字符都轉換為小寫;

toupper(轉換為大寫)

$filter=toupper(Name) eq 'sap' Name等于”sap”的字符都轉換為大寫;

trim(去空格后)

$filter=length(trim(Name)) eq length(‘sap’) Name去掉空格后依舊等于”sap”的所有信息腔寡;

我們在學習SAPUI5的時候可以使用免費的OData:

https://services.odata.org/V2/Northwind/Northwind.svc/

https://services.odata.org/V3/OData/OData.svc/

OData 比較運算符 - eqne掌唾、gt放前、ltgele

相等性運算符:

  • eq:測試某個字段是否等于某個常量值

  • ne:測試某個字段是否不等于某個常量值

范圍運算符:

  • gt:測試某個字段是否大于某個常量值

  • lt:測試某個字段是否小于某個常量值

  • ge:測試某個字段是否大于或等于某個常量值

  • le:測試某個字段是否小于或等于某個常量值

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糯彬,一起剝皮案震驚了整個濱河市凭语,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撩扒,老刑警劉巖似扔,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搓谆,居然都是意外死亡炒辉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門泉手,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黔寇,“玉大人,你說我怎么就攤上這事斩萌》炜悖” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵颊郎,是天一觀的道長憋飞。 經(jīng)常有香客問我,道長姆吭,這世上最難降的妖魔是什么榛做? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上检眯,老公的妹妹穿的比我還像新娘升敲。我一直安慰自己,他們只是感情好轰传,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布驴党。 她就那樣靜靜地躺著,像睡著了一般获茬。 火紅的嫁衣襯著肌膚如雪港庄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天恕曲,我揣著相機與錄音鹏氧,去河邊找鬼。 笑死佩谣,一個胖子當著我的面吹牛把还,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茸俭,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼吊履,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了调鬓?” 一聲冷哼從身側響起艇炎,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腾窝,沒想到半個月后缀踪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡虹脯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年驴娃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片循集。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡唇敞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暇榴,到底是詐尸還是另有隱情厚棵,我是刑警寧澤蕉世,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布蔼紧,位于F島的核電站,受9級特大地震影響狠轻,放射性物質(zhì)發(fā)生泄漏奸例。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望查吊。 院中可真熱鬧谐区,春花似錦、人聲如沸逻卖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽评也。三九已至炼杖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盗迟,已是汗流浹背坤邪。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罚缕,地道東北人艇纺。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像邮弹,于是被迫代替她去往敵國和親黔衡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容