最近作了一个小项目,其中用到了 WCF Data Service,以前是叫 ADO.NET Data Service 的。关于WCF Data Service,博客园里的介绍并很少,但它确实是个很好的框架。能够很方便地通HTTP来访问数据库,若是你是作富客户端开发的,用它绝对能大大减小你的工做量。出于对这个框架的喜好,因而把本身的一些使用经验写下来,而且但愿有更多的人可以用上。数据库
提及 WCF Data Service ,不得不说的是 OData。对于一个标准的 Web 服务,它每每会提供了一些功能,好比说:定货、退货这些,而后使用者经过HTTP协议来使用这些功能。这是面向服务的基本思想,然而面前服务有一些缺点,不少时候,无法准确预测到用户须要什么。所以老是要不断地增长新的接口,不断地修改返回的对象。json
另外一种方法是所谓的资源为导向的架构(ROA),暴露Web服务的资源,而且用户可以对各类对资源进行实时的查询,具备表现数据和整合数据的能力。相似于使用 SQL 在数据库中查询数据。惟一的区别是,ROA你经过URL建立查询。浏览器
OData是一个协议,规定公开数据的Web服务的特色。下面这段话是OData的定义架构
Open Data Protocol (开放数据协议,OData)是用来查询和更新数据的一种Web协议,其提供了把存在于应用程序中的数据暴露出来的方式。OData运用且构建于不少 Web技术之上,好比HTTP、Atom Publishing Protocol(AtomPub)和JSON,提供了从各类应用程序、服务和存储库中访问信息的能力。OData被用来从各类数据源中暴露和访问信息, 这些数据源包括但不限于:关系数据库、文件系统、内容管理系统和传统Web站点。框架
正如上面所提到的,OData服务经过Web服务来透露所提供的资源。而后您能够经过URL访问这些资源。 OData 协议指明了如何经过HTTP来查询数据。基本原则是,你能够输入某些带参数的 URL 来对资源进行查询。spa
下面是一些你可使用的 OData 公共服务,更多可使用的 OData 服务,你能够经过访问 OData 的官网来得到。orm
在介绍使用 OData 协议进行查询时,将会使用这些公开的 OData 服务。下面以 http://services.odata.org/Northwind/Northwind.svc/对象
为例,在浏览器中输入刚网址,你将会看到blog
从上图中你能够看到该服务提供了 Products、Advertisements、Categories、Suppliers 这些资源。经过输入下面这些 URL 便可对这些资源进行访问。例如:排序
这些查询,将会返回该资源的全部基于 XML-Atom 格式的数据。例以下图是 Products 的数据。
默认的格式是 XML-Atom,固然,你也能够其它格式,当前还支持 JSON 格式。只要在URL上添加 $format=json 参数,便可得到 json 格式的数据。
默认状况下,是会返回全部字段的,但不少时候,你可能只是须要获取其它的某些字段。例以下面的查询中只返回 ID 和 Name 字段。
不少时候,咱们还须要将关联的导航属性取出来。打开下面的 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/