【学习笔记】ODATA
ODATA
因?yàn)樵谧罱拈喿x中看到了大量ODATA這個(gè)名詞,都說(shuō)OData是一種非常簡(jiǎn)單的接口協(xié)議,結(jié)構(gòu)簡(jiǎn)單,操作簡(jiǎn)單,OData是實(shí)現(xiàn)REST最好的方法,而REST是一種web協(xié)議框架,類似于WebService和SOAP,但是提到它的一些特點(diǎn)和具體的實(shí)現(xiàn)方式卻又知之甚少,所以很有必要借機(jī)會(huì)找度娘了解一下,以下本篇為個(gè)人整理文檔,如有偏誤,敬請(qǐng)指出。
OData即開放數(shù)據(jù)協(xié)議(Open Data Protocol)是一種描述如何創(chuàng)建和訪問Restful服務(wù)的OASIS標(biāo)準(zhǔn)(經(jīng)ISO/IEC批準(zhǔn)),該標(biāo)準(zhǔn)由微軟發(fā)起。OData 是一個(gè)開源的協(xié)議,可以幫助您在創(chuàng)建 RESTFUL APIs期間專注于商業(yè)邏輯, 而不必?fù)?dān)心用哪種方法來(lái)定義請(qǐng)求和響應(yīng)頭、狀態(tài)代碼、HTTP方法、URL 規(guī)則、媒體類型、負(fù)載格式、查詢選項(xiàng)等。OData還提供追蹤變更事項(xiàng)、定義可重復(fù)使用的程序的功能/動(dòng)作、發(fā)送異步/批量請(qǐng)求的指南(https://www.odata.org/)。
通俗來(lái)說(shuō),?就是無(wú)論哪個(gè)組織構(gòu)建的Restful API,只要其符合OData標(biāo)準(zhǔn),其他組織就可以按照OData標(biāo)準(zhǔn)中定義的方式去使用這個(gè)API獲取/修改資源。這個(gè)可以類比SQL標(biāo)準(zhǔn)之于RDBMS關(guān)系,無(wú)論什么關(guān)系型數(shù)據(jù)庫(kù),如果其聲稱支持SQL 標(biāo)準(zhǔn),任何人就可以使用標(biāo)準(zhǔn)SQL查詢語(yǔ)句來(lái)查詢數(shù)據(jù)。也可以將Odata協(xié)議實(shí)現(xiàn)到一個(gè)通用的類庫(kù)中,通過(guò)這個(gè)類庫(kù)去創(chuàng)建和訪問Restful API可以減少開發(fā)人員的工作量。其中官網(wǎng)上有很多這樣類似的組件。
OData 協(xié)議遵循以下五種設(shè)計(jì)原則:
- 數(shù)據(jù)多樣性存儲(chǔ):在一個(gè)服務(wù)里面可以定義多種數(shù)據(jù)的存儲(chǔ);
- 向下兼容:客戶端和服務(wù)端可以使用不同版本的OData服務(wù),每個(gè)服務(wù)都可以向下兼容;
- REST原則:遵循REST原則;
- 容易擴(kuò)展:如果需要額外的服務(wù)能夠進(jìn)行簡(jiǎn)單的擴(kuò)展;
- 簡(jiǎn)單;
簡(jiǎn)單來(lái)說(shuō)OData就是用來(lái)查詢和更新數(shù)據(jù)的一種Web協(xié)議,提供了把存在于應(yīng)用程序中的數(shù)據(jù)暴露出來(lái)的方式,OData應(yīng)用Web技術(shù)如HTTP、Atom發(fā)布協(xié)議(AtomPub)和JSON等來(lái)提供對(duì)不同應(yīng)用程序、服務(wù)和存儲(chǔ)的信息訪問。這些數(shù)據(jù)源包括但不限于:關(guān)系數(shù)據(jù)庫(kù)、文件系統(tǒng)、內(nèi)容管理系統(tǒng)和傳統(tǒng)的Web站點(diǎn)等。除了提供一些基本的增刪查改操作,也提供了一些高級(jí)操作,類似于過(guò)濾數(shù)據(jù)和實(shí)體的導(dǎo)航。
如果需要實(shí)施OData服務(wù),需要完成以下四個(gè)部分:
- OData模型:定義數(shù)據(jù)結(jié)構(gòu),一般發(fā)生在后端系統(tǒng);
- OData協(xié)議:支持CRUDQ(創(chuàng)建,讀取,修改,刪除,查詢)功能,數(shù)據(jù)的傳輸可以使用XML或者JSON;
- OData客戶端庫(kù):保證了客戶端能夠使用庫(kù)函數(shù)方便的訪問OData服務(wù)。注意,客戶端庫(kù)并不是必須的,但是盡量有,這樣可以節(jié)省大量的編碼工作;
- OData服務(wù):可以最終被客戶端訪問的服務(wù);
OData常用操作:
| 操作 | URL | 說(shuō)明 |
| $filter | http://localhost:8090/api/Meetings?$filter=ProductName eq 'Tofu' | 根據(jù)表達(dá)式的狀態(tài)返回結(jié)果(返回ProductName 等于Tofu的Products) |
| $orderby | http://localhost:8090/api/Meetings?$orderby=ProductName | 根據(jù)結(jié)果排序(根據(jù)ProductName列排序) |
| $skip | http://localhost:8090/api/Meetings?$skip=10 | 越過(guò)結(jié)果中的n條數(shù)據(jù),常用于分頁(yè) |
| $top | http://localhost:8090/api/Meetings?$top=10 | 返回結(jié)果中的前n條記錄,常用于分頁(yè) |
| $select | http://localhost:8090/api/Meetings?$filter=ProductName eq 'Tofu'&$select=ProductName,UnitPrice | 選擇需要返回的屬性 |
| $expand | http://localhost:8090/api/Meetings?$expand=Supplier | 返回Products中包含的導(dǎo)航屬性(關(guān)聯(lián)屬性)Supplier |
| $inlinecount | http://localhost:8090/api/Meetings?$inlinecount=allpages | 向服務(wù)器獲取符合條件的資源總數(shù)(分頁(yè)的total值) |
函數(shù)操作:
contains(包含)
$filter=contains(Name,'sap')
Name中包含”sap”的所有信息,這樣就達(dá)到了模糊查詢的效果,只輸入其中的幾個(gè)字符便可查到所有包含這幾個(gè)字符的信息;
not contains(不包含)
$filter=not contains(Name,'sap')
Name中不包含”sap”的所有信息,與contains效果相反;
startswith(以xx開頭)
$filter=startswith(Name, 'sap')
Name以”sap”開頭的所有信息;
endswith(以xx結(jié)尾)
$filter=endswith(Name, 'sap')
Name以”sap”結(jié)尾的所有信息;
length(字符長(zhǎng)度)
$filter=length(Name) eq 10
Name中字符長(zhǎng)度等于10的所有信息;
indexof(字符長(zhǎng)度等于x索引為n開始包含xx字符)
$filter=indexof(Name, 'sap') eq 10
Name從第11個(gè)字母開始包含”sap”的所有信息;
replace(替換)
$filter=replace(Name, 'a', 'p') eq 'sap'
Name等于”sap”的信息中”a”被”p”替換;
substring(從第n個(gè)字符開始)
$filter=substring(Name, 1) eq 'sap'
Name從第2個(gè)字符開始是”sap”的所有信息
$filter=substring(Name, 1, 2) eq 'sa'
Name的第2個(gè)和第3個(gè)字符是”sa”的所有信息;
tolower(轉(zhuǎn)換為小寫)
$filter=tolower(Name) eq 'SAP'
Name等于”SAP”的字符都轉(zhuǎn)換為小寫;
toupper(轉(zhuǎn)換為大寫)
$filter=toupper(Name) eq 'sap'
Name等于”sap”的字符都轉(zhuǎn)換為大寫;
trim(去空格后)
$filter=length(trim(Name)) eq length(‘sap’)
Name去掉空格后依舊等于”sap”的所有信息;
?
我們?cè)趯W(xué)習(xí)SAPUI5的時(shí)候可以使用免費(fèi)的OData:
https://services.odata.org/V2/Northwind/Northwind.svc/
https://services.odata.org/V3/OData/OData.svc/
總結(jié)
以上是生活随笔為你收集整理的【学习笔记】ODATA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP Web IDE本地环境搭建
- 下一篇: 【学习笔记】JS基础语法一小时通