WCF Data Service 使用小结 —— 了解OData(一)
2013-07-03 22:36
288 查看
最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的。关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的框架。可以很方便地通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 服务,你可以通过访问 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/ 为例,在浏览器中输入刚网址,你将会看到
![](http://images.cnitblog.com/blog/24769/201307/03105740-1233eeb5d1f4487fbe60fafcecbebee7.jpg)
从上图中你可以看到该服务提供了 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 的数据。
![](http://images.cnitblog.com/blog/24769/201307/03110018-21edf8a944764bcb85ad4a3ccad8e21e.jpg)
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
![](http://images.cnitblog.com/blog/24769/201307/03111108-138fc568eb2e470684ba6119b2c9d1d8.jpg)
http://services.odata.org/Northwind/Northwind.svc/Products?$select=ProductID,ProductName&$format=json
![](http://images.cnitblog.com/blog/24769/201307/03111303-811a3b04dcaa4ba7a9c16739910aaa7b.jpg)
从下面这个图可以看到,Product 还有 Category、Order_Details、Supplier 三个导航属性。
![](http://images.cnitblog.com/blog/24769/201307/03111638-57c511d4bd4f42e4a8638aec7ed4086f.jpg)
通过 expand 参数,可以把相关的导航属性的数据一并取出。输入 http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier
![](http://images.cnitblog.com/blog/24769/201307/03112132-70cefb3dfb99499bbb01f2a228211acd.jpg)
当然,你也可以一次展开多个导航属性,多个导航属性之间使用“,”分隔,例如:
ttp://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier,Category
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$skip=10&$take=10
http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&ProductId gt 4
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简介
说起 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/ 为例,在浏览器中输入刚网址,你将会看到
![](http://images.cnitblog.com/blog/24769/201307/03105740-1233eeb5d1f4487fbe60fafcecbebee7.jpg)
从上图中你可以看到该服务提供了 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 的数据。
![](http://images.cnitblog.com/blog/24769/201307/03110018-21edf8a944764bcb85ad4a3ccad8e21e.jpg)
格式输出的数据
默认的格式是 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
![](http://images.cnitblog.com/blog/24769/201307/03111108-138fc568eb2e470684ba6119b2c9d1d8.jpg)
选取字段
默认情况下,是会返回所有字段的,但很多时候,你可能只是需要获取其它的某些字段。例如下面的查询中只返回 ID 和 Name 字段。http://services.odata.org/Northwind/Northwind.svc/Products?$select=ProductID,ProductName&$format=json
![](http://images.cnitblog.com/blog/24769/201307/03111303-811a3b04dcaa4ba7a9c16739910aaa7b.jpg)
展开
很多时候,我们还需要将关联的导航属性取出来。打开下面的 URL:http://services.odata.org/Northwind/Northwind.svc/$metadata从下面这个图可以看到,Product 还有 Category、Order_Details、Supplier 三个导航属性。
![](http://images.cnitblog.com/blog/24769/201307/03111638-57c511d4bd4f42e4a8638aec7ed4086f.jpg)
通过 expand 参数,可以把相关的导航属性的数据一并取出。输入 http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier
![](http://images.cnitblog.com/blog/24769/201307/03112132-70cefb3dfb99499bbb01f2a228211acd.jpg)
当然,你也可以一次展开多个导航属性,多个导航属性之间使用“,”分隔,例如:
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/
相关文章推荐
- WCF Data Service 使用小结 —— 了解OData(一)
- WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务
- WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务
- WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务
- WCF Data Service 使用小结 (一)—— 了解OData协议
- 使用WCF Data Service 创建OData服务
- Entity Framework4.0 (九EF4与WCF Data Service的结合使用
- Entity Framework4.0 (九EF4与WCF Data Service的结合使用(转)
- WCF Data Service 创建OData服务
- 使用API Key验证WCF Data Service
- [转]Consuming a OData Service in a Client Application (WCF Data Services)
- 在控制台应用程序中使用 OData 源(WCF Data Services 快速入门) 示例
- custom WCF data service
- WCF Data Service 的.NET Client 的不支持原生类型服务操作的解决方法
- WCF Data Service 的.NET Client 的不支持原生类型服务操作的解决方法
- Silverlight DataGrid使用WCF Service实现Load-on-demand的数据加载
- WCFService Configuration Editor的使用
- Hive - 建表和加载数据指令小结 以及使用Load data指令的注意事项
- SSH 中Spring-data-redis使用(使用baseService)
- Sharepoint2010使用AJAx 获取 OData Service (实现客户端获取sharepoint2010的数据)---第一篇