OData协议:开放数据共享协议

OData协议,全称Open Data Protocol,是一种用于数据共享的开放协议。它基于AtomPub协议,支持RESTful架构,使得通过简单的Web浏览器就可以查看通过OData服务暴露的数据。OData协议规范受到微软开放规范承诺(Microsoft Open Specification Promise,OSP)的保护。

OData的核心思想是使用广为人知的数据格式(Atom feed)来展示实体列表。AtomPub协议通过允许读取以外的CRUD(创建、读取、更新、删除)操作来扩展基础的Atom协议。OData进一步扩展了AtomPub,通过在feed上执行简单查询来实现。OData通常还暴露了一系列实体集,以及一个更高层次的分组feed,其中可以看到所有可用的feed。

示例

为了阐释这些概念,让看看OData官方网站()。它通过OData服务暴露了其数据:

http://services.odata.org/website/odata.svc

可以直接浏览这个页面,它会返回一个XML文档,列出不同的实体集:

XML格式如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <service xml:base="http://services.odata.org/Website/odata.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app"> <workspace> <atom:title>Default</atom:title> <collection href="ODataConsumers"> <atom:title>ODataConsumers</atom:title> </collection> <collection href="ODataProducerApplications"> <atom:title>ODataProducerApplications</atom:title> </collection> <collection href="ODataProducerLiveServices"> <atom:title>ODataProducerLiveServices</atom:title> </collection> </workspace> </service>

这个实体集(或feed)列表在OData中被称为工作区(workspace)。

现在,让看看其中一个feed,例如数据消费者(ODataConsumers)。该集合有一个href XML属性,指示如何构建URL来访问它:

http://services.odata.org/website/odata.svc/ODataConsumers

这个URL也返回一个XML文档,一个Atom feed。

如果在Internet Explorer中查看,会在feed阅读器视图中看到它。要查看原始XML,必须进入Internet选项,在内容标签页:

在底部,按下“Feeds和Web Slices”部分下的“设置”按钮。在设置屏幕上,确保关闭“feed阅读器视图”。

可能需要重新打开浏览器或至少是标签页来查看原始XML。

现在,如果查看XML,它是一个标准的Atom feed:它有一个标题,一个ID,一个更新时间,以及一堆条目。条目是实际的数据。如果查看一个条目:

<entry> <id>http://services.odata.org/Website/odata.svc/ODataConsumers(2)</id> <title type="text">OData Explorer</title> <summary type="text">A Silverlight application that can browse OData Services. It is available as part of the OData SDK Code Samples, and is available online at Silverlight.net/ODataExplorer.</summary> <updated>2010-06-26T17:46:31Z</updated> <author><name/></author> <link rel="edit" title="ODataConsumer" href="ODataConsumers(2)"/> <category term="ODataServices.ODataConsumer" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> <content type="application/xml"> <m:properties> <d:Id m:type="Edm.Int32">2</d:Id> <d:Name>OData Explorer</d:Name> <d:Description>A Silverlight application that can browse OData Services. It is available as part of the OData SDK Code Samples, and is available online at Silverlight.net/ODataExplorer.</d:Description> <d:ApplicationUrl>http://silverlight.net/ODataExplorer</d:ApplicationUrl> </m:properties> </content> </entry>

条目包含一个ID和一些其他属性,最重要的是content。现在,content包含标准EDM数据(实体数据模型)。通常,每个条目的内容属性是相同的,因此可以以表格格式显示数据。

查询

现在,一个实体集feed让可以访问整个实体集。OData允许通过feed查询实体集,通过操作URL。

例如,假设只想检索feed的前三个条目;会查询以下URL:

http://services.odata.org/website/odata.svc/ODataConsumers?$top=3

基本上对数据消费者URL应用了一个top操作符。以下是可以不同方式查询feed的非详尽列表:

查询字符串 描述 示例

$skip=<n> 跳过feed的前n个元素。 Browse...

$orderby=<property-name> 按给定属性排序结果。 Browse...

$filter=<filter expression> 根据过滤表达式过滤feed。 Browse...

有关不同查询字符串选项的详尽列表,请参见。OData查询系统相当强大,尽管不如SQL强大。

一个熟悉不同查询OData服务方式的好工具可在。它是一个免费的Silverlight应用程序,允许查询一个OData服务,并以表格格式显示结果。

更新

OData不仅仅是关于查询。它支持CRUD操作。这些操作是通过使用不同的HTTP动词(GET用于读取,PUT用于创建,POST用于更新,DELETE用于删除)来执行的。

默认情况下,OData服务返回Atom XML格式。它还支持JSON。为了接收JSON表示,这必须在HTTP头中编码。有关更多详细信息,请参见。

为什么想使用OData而不是自己的XML格式(例如,基于SOAP)?一般来说,OData是一个标准,因此被越来越多的客户端理解。具体来说,它被.NET框架理解:可以从客户端代码对OData服务执行LINQ查询。它也被Microsoft Excel 2010(用于数据透视表)理解。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485