第一季的链接以及系列导航: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等。

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

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

下表列举了一些常用的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

Web Api系列教程第2季(OData篇)(一)——OData简介和一个小应用的更多相关文章

  1. Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务

    前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然使用上一季的的项目背景(系列地址http://www.cnblogs.com/fzrain/p/34 ...

  2. [转]Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务

    本文转自:http://www.cnblogs.com/fzrain/p/3923727.html 前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然 ...

  3. ASP.NET Web API系列教程目录

    ASP.NET Web API系列教程目录 Introduction:What's This New Web API?引子:新的Web API是什么? Chapter 1: Getting Start ...

  4. ASP.NET Web API系列教程(目录)(转)

    注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP.NET Web API.这是一个用来在.NET平台上建立HTTP服务的Web API框架,是微软的又一项令人振奋的技术.目前,国内 ...

  5. [转]ASP.NET Web API系列教程(目录)

    本文转自:http://www.cnblogs.com/r01cn/archive/2012/11/11/2765432.html 注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP ...

  6. 【Web API系列教程】1.2 — Web API 2中的Action Results

    前言 本节的主题是ASP.NET Web API怎样将控制器动作的返回值转换成HTTP的响应消息. Web API控制器动作能够返回下列的不论什么值: 1. void 2. HttpResponseM ...

  7. 【转】ASP.NET WEB API系列教程

    from: 西瓜小强 http://www.cnblogs.com/risk/category/406988.html ASP.NET Web API教程(六) 安全与身份认证 摘要: 在实际的项目应 ...

  8. 【Web API系列教程】1.1 — ASP.NET Web API入门

    前言 HTTP不仅仅服务于web页面.同一时候也是构建暴露服务和数据的API的强大平台.HTTP有着简单.灵活和无处不在的特点.你能想到的差点儿全部平台都包括有一个HTTP库.所以HTTP服务能够遍及 ...

  9. Hello Web API系列教程——Web API与国际化

    软件国际化是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,在创建不同语言版本时,不需要重新设计源程序代码的软件工程方法.这在很多成熟的软件开发平台中非常常见.对于.net开发 ...

随机推荐

  1. 深入 理解vxlan

    VXLAN RFC 文档 : https://tools.ietf.org/html/rfc7348 作为网络虚拟化的重要技术,VXLAN备受关注,该协议是如何运作的?如何通过数据与控制层面的分离实现 ...

  2. Java反射机制学习与研究

    Java反射机制:可以获取正在运行时的Java对象. 1.判断运行时对象对象所属的类. 2.判断运行时对象所具有的成员变量和方法. 3.还可以调用到private方法,改变private变量的值. S ...

  3. android之二维码扫描的实现

    二维码扫描引擎有 ZBar 和ZXing 一. 使用开源ZXing扫描的缺点 1.原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做 2.有效扫描区域不好控制,可能是我自己技 ...

  4. Ubuntu下基于Nginx实现Tomcat集群负载均衡

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Nginx是一款HTTP和反向代理服务器,有关它的介绍可以到网上搜一下,很多很多,不再累述.这里,我们记录一下Nginx ...

  5. Redis集群(六):集群常用命令及说明

    一.本文目的        介绍集群的基本情况及常用命令      二.集群的特点    3.集群优缺点 三.集群客户端命令(redis-cli -c -p port) 集群cluster info ...

  6. html-div中内容自动换行

    <div style='width: 100px;display:block;word-break: break-all;word-wrap: break-word;'> 内容超出div宽 ...

  7. Java算法-选择排序

    (转载出处) 选择排序的基本思想是遍历数组的过程中,以 i 代表当前需要排序的序号,则需要在剩余的 [i…n-1] 中找出其中的最小值,然后将找到的最小值与 i 指向的值进行交换.因为每一趟确定元素的 ...

  8. windows无法安装到这个磁盘怎样解决

    装操作系统,出提示:windows无法安装到这个磁盘.这台计算机的硬件可能不支持启动到此盘.你甚至用专业的分区软件都无法解决这个问题,比如说PM等.一般在更换好新的硬盘的时候或者将操作系统装入移动硬盘 ...

  9. Fiddler Post Debug

    Content-Type: application/json; charset="UTF-8"

  10. Linux 传输文件

    不同的Linux之间copy文件通常有4种方法: ftp samba服务 sftp scp 我使用了scp在同网段的内网 ip之间传输,非常快.所以先介绍下scp的方法: scp 是 ssh管道下的c ...