本文属于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