本文属于OData系列

目录


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

参考资料

最新文章

  1. java反射技术详解
  2. c# 实现简单udp数据的发送和接收
  3. Queue 的用法
  4. JVM堆内存设置和测试
  5. 百度云推送-服务端 C# SDK
  6. Page传回页面的值问题
  7. Appium+Maven+TestNG(ReportNG)环境搭建(详细过程)
  8. SharePoint咨询师之路:备份和恢复系列二 - 备份服务器场
  9. 关于ComponentName的使用
  10. Linux下安装MySQLdb
  11. 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 &lt;machineKey&gt;
  12. (原创)我对未来的人类的发展,以及AI技术发展的一些思考。
  13. 编译安装MySQL5.6失败的相关问题解决方案
  14. BZOJ5311,CF321E 贞鱼
  15. 小白安装openvas总结-原创20181213
  16. Netty实战二之自己的Netty应用程序
  17. 关于Runtime error
  18. 在pypi上发布python包详细教程
  19. elasticsearch 不同集群数据同步
  20. 20135220谈愈敏Blog1_计算机是如何工作的

热门文章

  1. Cucumber(2)——目录结构以及基本语法
  2. CAS原理解析
  3. TensorFlow keras读取图片
  4. linux内核第一宏 container_of
  5. window servet 2012 r2 配置php服务器环境
  6. umditor删除域名,配置为绝对路径
  7. ThinkJS前端搭配vue时的Nginx配置
  8. Linux Centos7(Mac)安装Docker
  9. HDU 5451 Best Solver
  10. includes与indexOf