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

参考资料

武装你的WEBAPI-OData入门的更多相关文章

  1. OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

    一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open protocol to allow the creation and consumption of quer ...

  2. AspNet WebApi OData 学习

    OData介绍:是一个查询和更新数据的Web协议.OData应用了web技术如HTTP.Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务 和存储的信息访问.除了提供一些基本的操 ...

  3. AspNet.WebAPI.OData.ODataPQ

    AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务 AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔) AspNet. ...

  4. AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)

    AspNet.WebAPI.OData.ODataPQ 这是针对 Asp.net WebAPI OData 协议下,查询分页.或者是说 本人在使用Asp.Net webAPI 做服务接口时写的一个分页 ...

  5. 主攻ASP.NET MVC4.0之重生:Asp.Net MVC WebApi OData

    1.新建MVC项目,安装OData Install-Package Microsoft.AspNet.WebApi.OData -Version 4.0.0 2.新建WebAPI Controller ...

  6. AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)(转)

    出处:http://www.bubuko.com/infodetail-827612.html AspNet.WebAPI.OData.ODataPQ 这是针对 Asp.net WebAPI ODat ...

  7. [转]Composite Keys With WebApi OData

    本文转自:http://chris.eldredge.io/blog/2014/04/24/Composite-Keys/ In our basic configuration we told the ...

  8. [转]OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

    本文转自:http://www.cnblogs.com/bluedoctor/p/4384659.html 一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open ...

  9. 基于flask的轻量级webapi开发入门-从搭建到部署

    基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...

  10. webAPi OData的使用

    一.OData介绍 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准. 二.OData 在asp.net mvc中的用法 ...

随机推荐

  1. stand up meeting 12-9

    今天项目小组本已约好在今天下午四点半进行今天的daily scrum: 但是在四点半的时候,天赋和士杰同学均因组内项目会议延时,导致今天的daily scrum只能在晚上进行,但静雯同学因身体不舒服无 ...

  2. Nightmare BFS

    Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on him. The la ...

  3. linux CVE-2019-13272 本地特权漏洞

    漏洞描述 在5.1.17之前的Linux内核中,kernel / ptrace.c中的ptrace_link错误地处理了想要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来 ...

  4. 最通俗易懂的Redis发布订阅及代码实战

    发布订阅简介 除了使用List实现简单的消息队列功能以外,Redis还提供了发布订阅的消息机制.在这种机制下,消息发布者向指定频道(channel)发布消息,消息订阅者可以收到指定频道的消息,同一个频 ...

  5. tensorflow1.0 构建卷积神经网络

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import os os.envi ...

  6. windows下部署.netcore+docker系列四 (部署程序,重点就要来了)

    前面的都是为这章做准备,加油把骚年们 PS:C# 项目可以按照流程一步步来,java 偶然其他的可以找下其他的网上资源 1.在 VS2019中 添加docker 支持 (其实也就是追加一个Docker ...

  7. Python操作三大主流数据库

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:  ...

  8. mysql---3种常用引擎 和优点

  9. java程序员从小工到专家成神之路(2020版)

    目录 必须掌握的基础知识 1. Git & Github 2. Linux 3. 数据结构和算法 4. HTTP / HTTPS 5. 设计模式 6. 计算机原理 java学习之路 1. 工具 ...

  10. Spring Boot中的测试

    文章目录 简介 添加maven依赖 Repository测试 Service测试 测试Controller @SpringBootTest的集成测试 Spring Boot中的测试 简介 本篇文章我们 ...