欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

武装你的WEBAPI-OData入门

程序员文章站 2022-03-18 09:50:20
本文属于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请求来请求数据了。
武装你的WEBAPI-OData入门

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

参考资料