本文屬于OData系列
目錄
- 武裝你的WEBAPI-OData入門
- 武裝你的WEBAPI-OData便捷查詢
- 武裝你的WEBAPI-OData分頁查詢
- 武裝你的WEBAPI-OData資源更新Delta
- 武裝你的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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/33256.html
標籤:.NET Core
