【学习笔记】ODATA
ODATA
因為在最近的閱讀中看到了大量ODATA這個名詞,都說OData是一種非常簡單的接口協議,結構簡單,操作簡單,OData是實現REST最好的方法,而REST是一種web協議框架,類似于WebService和SOAP,但是提到它的一些特點和具體的實現方式卻又知之甚少,所以很有必要借機會找度娘了解一下,以下本篇為個人整理文檔,如有偏誤,敬請指出。
OData即開放數據協議(Open Data Protocol)是一種描述如何創建和訪問Restful服務的OASIS標準(經ISO/IEC批準),該標準由微軟發起。OData 是一個開源的協議,可以幫助您在創建 RESTFUL APIs期間專注于商業邏輯, 而不必擔心用哪種方法來定義請求和響應頭、狀態代碼、HTTP方法、URL 規則、媒體類型、負載格式、查詢選項等。OData還提供追蹤變更事項、定義可重復使用的程序的功能/動作、發送異步/批量請求的指南(https://www.odata.org/)。
通俗來說,?就是無論哪個組織構建的Restful API,只要其符合OData標準,其他組織就可以按照OData標準中定義的方式去使用這個API獲取/修改資源。這個可以類比SQL標準之于RDBMS關系,無論什么關系型數據庫,如果其聲稱支持SQL 標準,任何人就可以使用標準SQL查詢語句來查詢數據。也可以將Odata協議實現到一個通用的類庫中,通過這個類庫去創建和訪問Restful API可以減少開發人員的工作量。其中官網上有很多這樣類似的組件。
OData 協議遵循以下五種設計原則:
- 數據多樣性存儲:在一個服務里面可以定義多種數據的存儲;
- 向下兼容:客戶端和服務端可以使用不同版本的OData服務,每個服務都可以向下兼容;
- REST原則:遵循REST原則;
- 容易擴展:如果需要額外的服務能夠進行簡單的擴展;
- 簡單;
簡單來說OData就是用來查詢和更新數據的一種Web協議,提供了把存在于應用程序中的數據暴露出來的方式,OData應用Web技術如HTTP、Atom發布協議(AtomPub)和JSON等來提供對不同應用程序、服務和存儲的信息訪問。這些數據源包括但不限于:關系數據庫、文件系統、內容管理系統和傳統的Web站點等。除了提供一些基本的增刪查改操作,也提供了一些高級操作,類似于過濾數據和實體的導航。
如果需要實施OData服務,需要完成以下四個部分:
- OData模型:定義數據結構,一般發生在后端系統;
- OData協議:支持CRUDQ(創建,讀取,修改,刪除,查詢)功能,數據的傳輸可以使用XML或者JSON;
- OData客戶端庫:保證了客戶端能夠使用庫函數方便的訪問OData服務。注意,客戶端庫并不是必須的,但是盡量有,這樣可以節省大量的編碼工作;
- OData服務:可以最終被客戶端訪問的服務;
OData常用操作:
| 操作 | URL | 說明 |
| $filter | http://localhost:8090/api/Meetings?$filter=ProductName eq 'Tofu' | 根據表達式的狀態返回結果(返回ProductName 等于Tofu的Products) |
| $orderby | http://localhost:8090/api/Meetings?$orderby=ProductName | 根據結果排序(根據ProductName列排序) |
| $skip | http://localhost:8090/api/Meetings?$skip=10 | 越過結果中的n條數據,常用于分頁 |
| $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中包含的導航屬性(關聯屬性)Supplier |
| $inlinecount | http://localhost:8090/api/Meetings?$inlinecount=allpages | 向服務器獲取符合條件的資源總數(分頁的total值) |
函數操作:
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP Web IDE本地环境搭建
- 下一篇: 【学习笔记】SAP Fiori相关概念介