武装你的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
参考资料
- https://devblogs.microsoft.com/odata/simplifying-edm-with-odata/
- https://devblogs.microsoft.com/odata/supercharging-asp-net-core-api-with-odata/
武装你的WEBAPI-OData入门的更多相关文章
- 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 ...
- AspNet WebApi OData 学习
OData介绍:是一个查询和更新数据的Web协议.OData应用了web技术如HTTP.Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务 和存储的信息访问.除了提供一些基本的操 ...
- AspNet.WebAPI.OData.ODataPQ
AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务 AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔) AspNet. ...
- AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)
AspNet.WebAPI.OData.ODataPQ 这是针对 Asp.net WebAPI OData 协议下,查询分页.或者是说 本人在使用Asp.Net webAPI 做服务接口时写的一个分页 ...
- 主攻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 ...
- AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)(转)
出处:http://www.bubuko.com/infodetail-827612.html AspNet.WebAPI.OData.ODataPQ 这是针对 Asp.net WebAPI ODat ...
- [转]Composite Keys With WebApi OData
本文转自:http://chris.eldredge.io/blog/2014/04/24/Composite-Keys/ In our basic configuration we told the ...
- [转]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 ...
- 基于flask的轻量级webapi开发入门-从搭建到部署
基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...
- webAPi OData的使用
一.OData介绍 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准. 二.OData 在asp.net mvc中的用法 ...
随机推荐
- Daily Scrum 12/23/2015
Process: Zhaoyang: Compile the Caffe IOS version and make it run in the IOS9. Yandong: Finish the Az ...
- 1327C - Game with Chips (构造)
题目大意:一个n*m的棋盘上有k个棋子,k个棋子相互关联,可以一起向上向下向左向右,当碰到边界时,如果继续移动会发生越界,那么该棋子会保持不动,其余棋子继续移动.问能否在2*n*m的移动次数内,使各个 ...
- selemiun 问题总结
1.如果打开一个网页定位一个元素时发现不能够定位某一个元素,并且定位的方法没问题,则需要看下该网页是否有frame框架 解决办法: 如果有frame框架则需要先切换到frame框架下: driver. ...
- 设计模式-原型模式(Prototype)【重点:浅复制与深复制】
讲故事 最近重温了一下星爷的<唐伯虎点秋香>,依然让我捧腹不已,幻想着要是我也能有一名秋香如此的侍女,夫复何求呀,带着这个美好的幻想沉沉睡去... 突然想到,我是一名程序猿呀,想要什么对象 ...
- Java 多线程实现方式三:实现 Callable 接口
完整套路 java 通过实现Callable 接口来实现多线程相比较于继承Thread 接口和 实现Runnable 接口比较麻烦,但好处是可以有返回值. 基本套路: 1. 创建目标对象 2. 创建执 ...
- 新建MapReduce项目
添加各种jar包 /usr/local/hadoop/share/hadoop/.. 这几个文件夹下的jar包以及它们子目录lib下的所有jar包 将/usr/local/hadoop/etc/had ...
- Python玩转人工智能最火框架 TensorFlow应用实践 学习 教程
随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架.而在昨天机器之心发起的框架投票中,2144 位参与者中有 1441 位都在使用 Tenso ...
- sort()实现排序的原理
很多人都只知道sort()是通过快速排序实现,但它并不只是简单的快排:首先它对普通的快速排序进行了优化:此外,它还结合了插入 排序和堆排序.系统根据数据形式和数据量,来选择合适的排序方法,这并不是说每 ...
- List of common SCSI KCQs
Category Key ASC ASCQ Error Condition No Sense 0 00 00 No error 0 5D 00 No sense - PFA threshold rea ...
- centos7.4安装docker
安装docker的前提条件 1)关闭系统的防火墙和selinux 2) 同步系统时间 3)系统必须是centos7以上 移除旧版本yum remove docker docker-client do ...