本文屬於OData系列 目錄(可能會有後續修改) "武裝你的WEBAPI OData入門" 武裝你的WEBAPI OData便捷查詢 武裝你的WEBAPI OData分頁查詢 武裝你的WEBAPI OData資源更新 武裝你的WEBAPI OData之EDM 武裝你的WEBAPI OData格式轉換 ...
本文屬於OData系列
目錄(可能會有後續修改)
- 武裝你的WEBAPI-OData入門
- 武裝你的WEBAPI-OData便捷查詢
- 武裝你的WEBAPI-OData分頁查詢
- 武裝你的WEBAPI-OData資源更新
- 武裝你的WEBAPI-OData之EDM
- 武裝你的WEBAPI-OData格式轉換
- 武裝你的WEBAPI-OData使用Endpoint
EDM EDEDM EDM EDEDM!
前陣子刷抖音,隔幾個就是這個,被洗腦了,本著閑著也是閑著的心態,我決定一探究竟,唱的到底是個啥。
探索
網上找了一下,發現這個:EDM is short for Entity Data Model.
看到這個我就驚了,這不就是OData的數據模型嘛,我去,他們還挺有極客精神。想到前陣子也用OData來著,就簡單寫寫相關的內容吧。
OData簡介
什麼是OData?
OData(Open Data Protocol)是一個開源的開放協議(OASIS標準)的技術,開發者可以通過它向用戶提供可查詢的API。(官方網站)
很籠統,我們直接看這個玩意可以乾什麼:
- 客戶端可以通過請求自行設計查詢,不需要和後端溝通具體查詢參數、介面等信息,節省了大量的溝通成本和時間成本。
- 數據的篩選是在服務端完成的,不需要客戶端一次性請求所有數據併在前端篩選,大大提升了效率。
- 支持數據的定製,可以選擇數據的多個維度。
- 結合EF等ORM技術,數據可以直接通過資料庫查詢獲得,效率更高。
- 輕鬆實現分頁查詢
- 符合RESTful
非常有吸引力,如果後端寫好介面,前端自己去選數據了,想幹啥幹啥,別找我要傳參查詢,世界多美好。
這個東西見的不多,但是確實在很多地方用到,例如SharePoint、Microsoft Graph等等,沒錯你猜對了,這東西就是微軟和SAP出的,2007年就有了。SAP也用了很多這個,很多資料都是他們寫的。和這個東西類似的有一個GraphQL,沒研究過。
- 官方的口號是OData - the best way to REST
方法
直接看看應該怎麼用吧,首先你需要有一個現成的API。
安裝Nuget包
Install-Package Microsoft.AspNetCore.OData
設置Startup.cs
需要在ConfigureServices裡面增加
services.AddOData();
在Configure裡面增加
app.UseMvc(routeBuilder => {
routeBuilder.EnableDependencyInjection();
//啟用EXPAND/SELECT/ORDERBY/FILTER語法支持
routeBuilder.Expand().Select().OrderBy().Filter();
});
然後在API的方法上面添加[EnableQuery]
這個內容就行了。
[HttpGet]
[EnableQuery]
public IEnumerable<Student> GetStudents()
{
return this.context.Students;
}
簡單使用
部署好了之後,就可以使用GET
請求來請求數據了。
Select查詢
api/students?$select=Name
上面的請求將只返回學生的姓名,別的就不返回了,這樣能夠減少大量的數據。
Filter過濾
api/students?$filter=Name eq 'Todd'
上面的查詢返回student用戶名為Todd的記錄。
api/students?filter=Score gt 100
上面的查詢返回Score大於100的學生的記錄。
OrderBy排序
api/students?$orderby=Score desc
上面的查詢返回按照Score進行降序排序的記錄。
總結
OData使得客戶端的查詢變得極其方便,本文只是開篇,還有很多更方便的特性,以後再講。
官方示例項目:https://github.com/hassanhabib/ODataDemo
參考資料
- https://devblogs.microsoft.com/odata/simplifying-edm-with-odata/
- https://devblogs.microsoft.com/odata/supercharging-asp-net-core-api-with-odata/