zoukankan      html  css  js  c++  java
  • Web Api系列教程第2季(OData篇)(一)——OData简介和一个小应用

    第一季的链接以及系列导航:http://www.cnblogs.com/fzrain/p/3490137.html

    在这里,首先要感谢Taiseer Joudeh不断的为我们带来最新的技术分享,楼主对web api这种技术可谓是非常的喜欢,同时也得到很多园友的支持,所以继续是必然的。经过上一阶段的学习,我们对于web api应该已经不是很陌生了,从本篇开始将开始介绍OData。我也是刚开始学,因此把学习过程记录下来并分享给大家,期待一起交流进步。

    在本次系列中,我们将沿用第一季的项目背景来构建一个OData服务,本文将用一个简单的例子帮大家来认识OData,在介绍例子之前我们先介绍一下OData的定义和约定。

    OData简介

    Open Data Protocol (开放数据协议,OData)是用来查询和更新数据的一种Web协议,其提供了把存在于应用程序中的数据暴露出来的方式。OData运用且构建于很多 Web技术之上,比如HTTP、Atom Publishing Protocol(AtomPub)和JSON,提供了从各种应用程序、服务和存储库中访问信息的能力。OData被用来从各种数据源中暴露和访问信息, 这些数据源包括但不限于:关系数据库、文件系统、内容管理系统和传统Web站点。

    我们知道,构建符合REST原则的服务应该具备一下特点:

    1.每一个资源都由一个唯一的URI来标识。

    2.通过HTTP方法(GET, POST, PUT, and DELETE)来实现对资源的CRUD。

    3.能根据客户端指定的格式来返回数据:XML,JSON等。

    Odata1

    小应用:查询现有的OData服务

    在我们开始创建OData服务之前,为了让大家对OData有一个更深入的理解,在这里我们将查询一个已经存在的OData服务(使用的是Northwind数据库),对应的基地址是:http://services.odata.org/Northwind/Northwind.svc。你可以使用任何REST客户端(例如fiddlerPostMan)。当然如果只是做查询操作,你也可以直接使用浏览器。

    下表列举了一些常用的Odata操作:

    操作

    URL

    说明

                 $filter http://services.odata.org/Northwind/Northwind.svc/Products?$filter=ProductName eq 'Tofu' 根据表达式的状态返回结果(返回ProductName 等于Tofu的Products)
                $orderby http://services.odata.org/Northwind/Northwind.svc/Products?$orderby=ProductName 根据结果排序(根据ProductName列排序)
                $skip http://services.odata.org/Northwind/Northwind.svc/Products?$skip=10 越过结果中的n条数据,常用于分页
                $top http://services.odata.org/Northwind/Northwind.svc/Products?$top=10 返回结果中的前n条记录,常用于分页
               $select http://services.odata.org/Northwind/Northwind.svc/Products?$filter=ProductName eq 'Tofu'&$select=ProductName,UnitPrice 选择需要返回的属性
               $expand http://services.odata.org/Northwind/Northwind.svc/Products?$expand=Supplier 返回Products中包含的导航属性(关联属性)Supplier
              $inlinecount http://services.odata.org/Northwind/Northwind.svc/Products?$inlinecount=allpages 向服务器获取符合条件的资源总数(分页的total值)

    通过上面表格的内容,我们还可以通过组合查询条件来实现复杂的查询(例如:我们想实现服务器端的分页,那么我们就可以使用如下的URI:http://services.odata.org/Northwind/Northwind.svc/Products?$top=10&$skip=0&$orderby=ProductName&$inlinecount=allpages)。在上面的URI中,$skip代表跳过的数据,通常指pageSize*pageIndex,同时$inlinecount返回一个int值代表记录总数。

    OData服务支持内容的选择,也就是说客户端可以通过设置请求头Accept header来定制响应数据的格式,每种格式都有各自的优缺点,下表就说明了彼此的不同之处:

     

    XML

    JSON(详细版)

    JSON(轻量版)

                OData版本 版本1,2,3 版本1,2,3 版本3
              元数据及超链接 包含数据和元数据 包含数据和元数据 仅包含数据
              数据大小 28.67 KBs 14.34 KBs, 小了近50% 4.25 KBs, 小了近75%
    对于移动客户端消费是否简单
           Accept Header application/atom+xml application/json;odata=verbose application/json
     
    作者:FZRAIN
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    剑指offer——关于排序算法的应用(一):归并排序
    剑指offer——关于排序算法的应用:选择排序和冒泡排序
    剑指offer:将矩阵选择、螺旋输出矩阵——Python之光
    剑指offer:链表——常见的多指针协同操作:
    剑指Offer:编程习惯篇:代码鲁棒性,代码可扩展性——防御性的编程习惯,解决问题时方法分模块考虑
    剑指offer:数字二进制含1个数,快速幂运算:二进制位运算的运用
    剑指offer:斐波那契数列,跳台阶,变态跳台阶——斐波那契数列类题目:
    回溯法实现各种组合的检索:
    剑指offer:二维数组中查找
    jdk生成https证书的方法
  • 原文地址:https://www.cnblogs.com/fzrain/p/3688439.html
Copyright © 2011-2022 走看看