最近做了一个小项目,其中用到了 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/

最新文章

  1. Hadoop的体系结构
  2. oracle触发器详解
  3. spring 注解重复(防重复请求)
  4. 20145304 第五周Java学习报告
  5. Mysql忘记用户密码的解决办法
  6. Javascript Window Location
  7. Struts2 的ModelDriven理解
  8. BZOJ 1257 余数之和sum
  9. BoneCP主要配置参数
  10. Tomcat相关目录及配置文件总结
  11. Python 面向对象(五) 描述器
  12. 《图解Spark:核心技术与案例实战》作者经验谈
  13. github emoji 表情列表
  14. Postman----打开postman console控制台,查看接口测试打印log
  15. Selenium Webdriver点击事件失效问题
  16. OOP随笔
  17. ROM后缀含义
  18. 详解Laravel的目录结构
  19. Ribbon 使用入门
  20. new malloc

热门文章

  1. golang vim环境搭建
  2. 王家卫i
  3. Add a stylesheet link programmatically in ASP.NET
  4. Java 集合深入理解(7):ArrayList
  5. HDU 5025
  6. 表视图控制器(TableViewController)(一)
  7. H - 放苹果
  8. 【题解】【BST】【Leetcode】Validate Binary Search Tree
  9. RelativeLayout相对布局
  10. Jquery.KinSlideshow图片轮播插件