本文屬於OData系列html
目錄(可能會有後續修改)前端
- 武裝你的WEBAPI-OData入門
- 武裝你的WEBAPI-OData便捷查詢
- 武裝你的WEBAPI-OData分頁查詢
- 武裝你的WEBAPI-OData資源更新
- 武裝你的WEBAPI-OData之EDM
- 武裝你的WEBAPI-OData格式轉換
- 武裝你的WEBAPI-OData使用Endpoint
EDM EDEDM EDM EDEDM!git
前陣子刷抖音,隔幾個就是這個,被洗腦了,本着閒着也是閒着的心態,我決定一探究竟,唱的究竟是個啥。github
網上找了一下,發現這個:EDM is short for Entity Data Model.shell
看到這個我就驚了,這不就是OData的數據模型嘛,我去,他們還挺有極客精神。想到前陣子也用OData來着,就簡單寫寫相關的內容吧。數據庫
什麼是OData?c#
OData(Open Data Protocol)是一個開源的開放協議(OASIS標準)的技術,開發者能夠經過它向用戶提供可查詢的API。(官方網站)後端
很籠統,咱們直接看這個玩意能夠幹什麼:api
很是有吸引力,若是後端寫好接口,前端本身去選數據了,想幹啥幹啥,別找我要傳參查詢,世界多美好。app
這個東西見的很少,可是確實在不少地方用到,例如SharePoint、Microsoft Graph等等,沒錯你猜對了,這東西就是微軟和SAP出的,2007年就有了。SAP也用了不少這個,不少資料都是他們寫的。和這個東西相似的有一個GraphQL,沒研究過。
- 官方的口號是OData - the best way to REST
直接看看應該怎麼用吧,首先你須要有一個現成的API。
Install-Package Microsoft.AspNetCore.OData
須要在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
請求來請求數據了。
api/students?$select=Name
上面的請求將只返回學生的姓名,別的就不返回了,這樣可以減小大量的數據。
api/students?$filter=Name eq 'Todd'
上面的查詢返回student用戶名爲Todd的記錄。
api/students?filter=Score gt 100
上面的查詢返回Score大於100的學生的記錄。
api/students?$orderby=Score desc
上面的查詢返回按照Score進行降序排序的記錄。
OData使得客戶端的查詢變得極其方便,本文只是開篇,還有不少更方便的特性,之後再講。
官方示例項目:https://github.com/hassanhabib/ODataDemo