OData和REST Web服务之间的区别

207

OData和RESTful Web服务之间有什么区别?


2
一个是生产者,另一个则是为消费者提供支持的推动者。 - Kangkan
8个回答

102

更新:警告,由于OData V4已经出现,此答案现在已经非常过时了。


我之前写过一篇关于这个主题的文章这里

正如Franci所说,OData基于Atom Pub。但是,在此基础上他们添加了一些功能,不幸的是在这个过程中忽略了一些REST的限制。

OData服务的查询能力要求你构造基于响应中不可用或链接的信息的URI。这就是REST人们称为超出绑定信息,并引入了客户端和服务器之间的隐藏耦合。

引入的另一个耦合是通过使用EDMX元数据来定义条目内容中包含的属性。此元数据可以在称为$metadata的固定端点处发现。同样,客户端需要预先知道这一点,它不能被发现。

不幸的是,微软没有考虑创建描述这些关键数据的媒体类型,因此任何OData客户端都必须对其所连接的服务和接收到的数据做出大量假设。


1
@sksallaj 从我在V3 OData规范http://www.odata.org/media/30002/OData.html#metadatadocumentrequest中所读到的内容来看,CSDL仍然是定义OData数据模型的规范。在这方面没有任何变化。OData客户端从未局限于MS技术。 - Darrel Miller
6
实际上这已经过时了。OData的V3版本已经添加了“JSON Light”,解决了这两个问题(实际上它们只是一个问题),也就是$metadata是建立查询的方式,所以唯一缺失的是在资源表述中添加链接到$metadata。现在已经添加了这个链接,因此这两个问题一并解决。 - Alex James
11
@DarrelMiller 你提到你的回答现在已经过时了。能否更新一下您对该主题的看法?我仍然很想知道OData 4和REST之间的区别。非常感谢。 - Kurren
2
@Kurren 这件事在我的待办清单上,但不幸的是这个清单很长。 - Darrel Miller
2
@DarrelMiller 希望你能抽出一些时间尽快更新帖子,使其与 OData V4 保持最新。 - LCJ
显示剩余14条评论

68

OData协议是建立在AtomPub协议之上的。AtomPub协议是REST API设计的最佳实践之一。因此,在某种程度上,您是正确的 - OData只是另一个REST API,每个OData实现都是RESTful Web服务。

区别在于OData是一种特定的协议;REST是一种架构风格和设计模式。


我可能在这方面有所错误(刚开始学习odata),但根据[协议][http://www.odata.org/documentation]的第3版,它似乎还指定了一种JSON格式,您也可以选择使用。您能否对此进行解释? - Johannes Rudolph
1
@JohannesRudolph,老实说我不知道。我已经两年没有看过 OData 了。但很可能微软已经添加了 JSON 支持。请注意,这并不会以任何方式改变这里的任何回复。JSON vs XML 只是 REST 资源呈现的一个问题。 - Franci Penov
1
您可以在请求中指定所需的格式。大多数实现都支持XML和JSON,例如通过将Accept头设置为application/json(从OData版本2开始)。 - i000174

32

REST是一种通用的设计技术,用于描述如何访问Web服务。使用REST,您可以发出HTTP请求来获取数据。如果您在浏览器中尝试它,它就像访问一个网站一样,但返回的不是网页,而是XML。有些服务还会返回JSON格式的数据,这对JavaScript更容易使用。

OData是通过REST公开数据的特定技术。

如果你想快速概括一下,可以这样说:

  • REST - 设计模式
  • OData - 实现技术

REST不仅限于HTTP或Web。 - user27874

22
在2012年,OData进行了标准化,因此我将在此添加更新。
首先定义如下: REST - 是如何通过HTTP发送消息的架构。 OData V4 - 是REST的一个特定实现,真正定义了不同格式(当前我认为是AtomPub和JSON)中消息的内容。OData V4遵循REST原则。
例如,asp.net人员将大多使用WebApi控制器将对象序列化/反序列化为JSON,并使javascript对其执行某些操作。 Odata的重点在于能够直接从URL查询开箱即用的选项。

10
从OData 文档中可以了解到:

OData协议是通过RESTful web服务与数据进行交互的应用级协议。

...

OData协议不同于其他基于REST的web服务方法,因为它提供了一种统一的方式来描述数据和数据模型。


5
OData(Open Data Protocol)是一种OASIS标准,定义了构建和使用RESTful API的最佳实践。使用OData可以让您专注于业务逻辑而不必担心如何定义请求和响应头,状态码,HTTP方法,URL约定,媒体类型,有效载荷格式和查询选项等。此外,OData还指导您跟踪更改,定义用于可重用过程的功能/操作以及发送异步/批量请求等。另外,OData提供扩展功能,以满足RESTful API的任何自定义需求。
使用OData RESTful API非常容易。 OData元数据是API数据模型的机器可读描述,使得创建强大的通用客户端代理和工具成为可能。其中一些工具甚至可以在不知道协议的情况下与OData进行交互。以下6个步骤演示了在不同编程平台上使用OData的6种有趣场景。但如果您不是开发人员,只想简单地玩转OData,则XOData是您最好的起点。
更多详细信息请参见http://www.odata.org/

4

ODATA是一种特殊的REST,我们可以通过URL 统一查询数据


3

REST代表着表现层状态转移,是一种基于资源的架构风格。基于资源意味着数据和功能被视为资源。

OData是一种基于Web的协议,它定义了一组构建和使用RESTful Web服务的最佳实践。OData是创建RESTful Web服务的一种方式,因此它也是REST的一种实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接