武装你的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