• 武装你的WEBAPI-OData入门


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

    参考资料

  • 相关阅读:
    codeforces 55d记忆化搜索
    codeforces 698b 图论
    codeforces 716d 图论加二分
    求多边形面积模板***
    hdu 5869 区间gcd的求法及应用
    codeforces 589a(构造的字符串后,最后要加终止符,,,)
    凸包模板***
    2014ACM-ICPC 西安赛区总结
    Codeforces 475D CGCDSSQ(分治)
    Acdream1217 Cracking' RSA(高斯消元)
  • 原文地址:https://www.cnblogs.com/podolski/p/12874013.html
Copyright © 2020-2023  润新知