了解OData(一)

最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的。关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的框架。可以很方便地通HTTP来访问数据库,如果你是做富客户端开发的,用它绝对能大大减少你的工作量。出于对这个框架的喜爱,于是把自己的一些使用经验写下来,并且希望有更多的人能够用上。

OData简介

说起 WCF Data Service ,不得不说的是 OData。对于一个标准的 Web 服务,它往往会提供了一些功能,比如说:订货、退货这些,然后使用者通过HTTP协议来使用这些功能。这是面向服务的基本思想,然而面前服务有一些缺点,很多时候,没法准确预测到用户需要什么。因此总是要不断地增加新的接口,不断地修改返回的对象。

另一种方法是所谓的资源为导向的架构(ROA),暴露Web服务的资源,并且用户能够对各种对资源进行实时的查询,具有表现数据和整合数据的能力。类似于使用 SQL 在数据库中查询数据。唯一的区别是,ROA你通过URL创建查询。

OData是一个协议,规定公开数据的Web服务的特点。下面这段话是OData的定义

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

OData协议概述

正如上面所提到的,OData服务通过Web服务来透露所提供的资源。然后您可以通过URL访问这些资源。 OData 协议指明了如何通过HTTP来查询数据。基本原则是,你可以输入某些带参数的 URL 来对资源进行查询。

下面是一些你可以使用的 OData 公共服务,更多可以使用的 OData 服务,你可以通过访问 OData 的官网来获得。

  • http://services.odata.org/WebSite/OData.svc/
  • http://services.odata.org/OData/OData.svc/
  • http://services.odata.org/Northwind/Northwind.svc/

在介绍使用 OData 协议进行查询时,将会使用这些公开的 OData 服务。下面以 http://services.odata.org/Northwind/Northwind.svc/

为例,在浏览器中输入刚网址,你将会看到

从上图中你可以看到该服务提供了 Products、Advertisements、Categories、Suppliers 这些资源。通过输入下面这些 URL 即可对这些资源进行访问。例如:

  • http://services.odata.org/Northwind/Northwind.svc/Products
  • http://services.odata.org/Northwind/Northwind.svc/Categories
  • http://services.odata.org/Northwind/Northwind.svc/Suppliers

这些查询,将会返回该资源的所有基于 XML-Atom 格式的数据。例如下图是 Products 的数据。

格式输出的数据

默认的格式是 XML-Atom,当然,你也可以其它格式,当前还支持 JSON 格式。只要在URL上添加 $format=json 参数,即可获得 json 格式的数据。

  • http://services.odata.org/Northwind/Northwind.svc/Products?$format=json
  • http://services.odata.org/Northwind/Northwind.svc/Categories?$format=json
  • http://services.odata.org/Northwind/Northwind.svc/Suppliers?$format=json

选取字段  

默认情况下,是会返回所有字段的,但很多时候,你可能只是需要获取其它的某些字段。例如下面的查询中只返回 ID 和 Name 字段。

  • http://services.odata.org/Northwind/Northwind.svc/Products?$select=ProductID,ProductName&$format=json

展开

很多时候,我们还需要将关联的导航属性取出来。打开下面的 URL:http://services.odata.org/Northwind/Northwind.svc/$metadata

从下面这个图可以看到,Product 还有 Category、Order_Details、Supplier 三个导航属性。

通过 expand 参数,可以把相关的导航属性的数据一并取出。输入 http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier

当然,你也可以一次展开多个导航属性,多个导航属性之间使用“,”分隔,例如:

ttp://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier,Category

分页

通过 $top 和 $skip 参数,可以进行分页显示,例如:

http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$skip=10&$take=10

过滤

使用 $filter参数,可以对数据进行过滤,例如:

http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&ProductId gt 4

排序

使用 $orderby 参数,可以对数据进行排序,例如:

http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product

升序

http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product asc

降序

http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product desc

关于关键字的详细使用,可以参考 OData 官网的文档。

http://www.odata.org/documentation/odata-v2-documentation/uri-conventions/

了解OData(一)的更多相关文章

  1. ABP框架 - OData 集成

    文档目录 本节内容: 简介 安装 安装Nuget包 设置模块依赖 配置你的实体 创建控制器 示例 获取实体列表 请求 响应 获取单个实体 请求 响应 获取单个实体及导航属性 请求 响应 查询 请求 响 ...

  2. ABP源码分析三十八: ABP.Web.Api.OData

    如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...

  3. OData Client Code Generator

    转发. [Tutorial & Sample] How to use OData Client Code Generator to generate client-side proxy cla ...

  4. Microsoft Dynamics CRM 2013 Js Odata 查询

    实现功能:   在新建记录时,(大区,省区,城市)的值默认为当前用户的值.tips:字段均为lookup类型; function Default_region(){ var fromtype=Xrm. ...

  5. 让OData和NHibernate结合进行动态查询

    OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...

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

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

  7. ABP理论学习之OData集成(新增)

    返回总目录 本篇目录 介绍 安装 创建控制器 例子 样例项目 介绍 OData在其官网的定义是: 允许以一种 简单且标准的方式创建和使用可查询的.可互操作的RESTful APIs. 在ABP中也可以 ...

  8. OData的初步认识

    What – OData是什么? OData - Open Data Protocal,是一个设计和使用RESTful API的标准.REST本身只是一个构建web服务的思想和理念,其没有规定一个统一 ...

  9. OData V4 学习目录

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

  10. OData V4 系列 Action 与 Function

    OData 学习目录 了解过WebApi的都知道,WebApi默认方法 Get.Post.Put,如果增加其它过多Post方法即不能识别,还需增加其它配制,请求的Url还需加上Controller及A ...

随机推荐

  1. hdu1848 Fibonacci again and again(SG游戏功能)

    现在的变化是看不清楚SG功能什么寻求方法 临时模板标题是首当 性能mex1它正在寻求g(x) 然后XOR #include<cstdio> #include<iostream> ...

  2. SQL Server中存储过程比直接运行SQL语句慢的原因

    原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1.       存储过程只在创造时进行编译即可,以 ...

  3. Scala Sublime text 3 Build 编译

    使用Sublime text 3编译Scala 在sublime工具栏中[tools]->[Build System]->[new Build System]添加如下文本 { " ...

  4. Android 4.4堆叠结构的变化

    我们知道,activity 在 AMS 的形式是 ActivityRecord,task 在 AMS 的形式TaskRecord,流程 AMS 该管理形式 ProcessRecord. 我们先看下 4 ...

  5. 2.1 LINQ的查询表达式

    在进行LINQ查询的编写之前,首先需要了解查询表达式.查询表达式是LINQ查询的基础,也是最常用的编写LINQ查询的方法. 查询表达式由查询关键字和对应的操作数组成的表达式整体.其中,查询关键字是常用 ...

  6. weblogic生产、开发模式互转

    生产模式与开发模式转换: 1.生产模式-->开发模式     将%DOMAIN_HOME%\config\config.xml文件中<production-mode-enabled> ...

  7. NYOJ 58 步数最少 【BFS】

    意甲冠军:不解释. 策略:如果: 这个问题也可以用深宽搜索搜索中使用.我曾经写过,使用深层搜索.最近的学校范围内的搜索,拿这个问题来试试你的手. 代码: #include<stdio.h> ...

  8. 青铜器RDM全面支持CMMI、GJB5000A L2~L5认证评估

    青铜器RDM全面实现对CMMI L4.GJB5000A L4的100%支持,并且已经成为众多组织CMMI.GJB5000A落地执行的有效手段,避免认证与执行2张皮,有利于体系的贯彻执行,以下是青铜器R ...

  9. 什么是gulp

    gulp:入门简介   本文是gulp的入门级介绍,主要内容包括什么是gulp,gulp与grunt有什么区别,gulp可以解决grunt存在的哪些问题,以及一个简单的说明例子. 什么是gulp gu ...

  10. C# 订单流水号生成

    例如流水号格式如下:XX201604120001,2位前缀加8位日期加4位流水号 首先各种搜索出现如下解决方案 public class SerialNoHelper { /// <summar ...