OData和REST Web服务之间的区别


196

在研究某些Web服务时,我遇到了Microsoft称之为OData的 “新”技术。通过阅读FAQ中有关OData是什么的通篇,我很难区分OData和REST-ful Web服务。有人可以帮我理解差异吗?


2
一个是生产者,另一个是消费者的推动者。
康坎2014年

Answers:


98

更新 警告,由于OData V4可用,此答案已经过时了。


不久前,我在这里写了一篇有关该主题的文章。

正如Franci所说,OData基于Atom Pub。但是,他们将某些功能置于顶层,但不幸的是,在此过程中它们忽略了一些REST约束。

OData服务的查询功能要求您根据不可用或未链接到响应的信息来构造URI。REST人们称之为带外信息,并引入了客户端和服务器之间的隐藏耦合。

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

不幸的是,Microsoft认为不适合创建媒体类型来描述这些关键数据,因此任何OData客户端都必须对其正在与之交谈的服务以及正在接收的数据做出一系列假设。


1
@felickz抱歉。我遇到了DNS问题。它应该现在正在工作。或者是您的dns缓存过期时。
Darrel Miller

6
实际上,这已经过时了。OData的V3版本添加了“ JSON Light”,它解决了这两个问题(实际上只是一个问题),即$ metadata是您如何构建查询的方式,因此所缺少的只是在资源表示形式中指向$ metadata的链接。这已添加,因此两个问题都一口气消失了。
亚历克斯·詹姆斯

10
@DarrelMiller您提到您的答案现在已过时。想要添加您对该主题的看法的更新吗?我仍然会对了解OData 4和REST之间的区别感兴趣。非常感谢
Kurren

2
@Kurren在我的待办事项清单上,但不幸的是,这是一个很长的清单。
Darrel Miller

2
@DarrelMiller希望您会在不久的将来找到一些更新帖子的时间,以使其与OData V4保持同步。
LCJ

64

OData协议建立在AtomPub协议之上。AtomPub协议是REST API设计的最佳示例之一。因此,从某种意义上来说,您是对的-OData只是另一个REST API,每个OData实现都是一个REST-ful Web服务。

区别在于OData是特定协议;REST是建筑风格和设计模式。


我对此可能是错的(刚刚开始学习odata),但是从[protocol] [ odata.org/documentation]的第3版开始,似乎还指定了JSON格式,您可以选择使用它。你能对此有所启发吗?
约翰内斯·鲁道夫

1
@JohannesRudolph,老实说,我不知道。在过去的两年中,我没有看过OData。但是,微软很有可能会添加JSON支持。但是请注意,这丝毫不改变此处的任何响应。JSON与XML只是REST资源的表示形式。
弗朗西·佩诺夫(Francis Penov)2012年

1
您可以在请求中指定想要的格式。大多数实现都应支持XML和JSON,例如,将Accept标头设置为application / json(从OData版本2开始)
i000174 '16

31

REST是一种通用的设计技术,用于描述如何访问Web服务。使用REST,您可以发出http请求以获取数据。如果您在浏览器中进行尝试,那就像去一个网站,除了返回网页之外,您将获得XML。某些服务还将返回JSON格式的数据,该数据更易于与Javascript结合使用。

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

如果您想快速总结一下,可以考虑一下:

  • REST-设计模式
  • OData-支持技术

20

OData在2012年进行了标准化,因此我将在此处添加一个更新。

首先定义:

REST-是一种如何通过HTTP发送消息的体系结构。

OData V4-是REST的特定实现,实际上定义了不同格式的消息内容(当前我认为是AtomPub和JSON)。ODataV4遵循休息原则。

例如,asp.net人们将主要使用WebApi控制器将对象序列化/反序列化为JSON,然后让javascript对其进行处理。Odata的要点是能够使用现成的选项直接从URL查询。


10

从OData 文档中

OData协议是一种应用程序级协议,用于通过RESTful Web服务与数据进行交互。

...

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


4

OData(开放数据协议)是OASIS标准,它定义了构建和使用RESTful API的最佳实践。OData可帮助您在构建RESTful API时专注于业务逻辑,而不必担心定义请求和响应头,状态代码,HTTP方法,URL约定,媒体类型,有效载荷格式和查询选项等的方法。OData还可以指导您跟踪更改,定义可重用过程的功能/动作以及发送异步/批处理请求等。此外,OData还提供了扩展功能,可以满足RESTful API的任何自定义需求。

OData RESTful API易于使用。OData元数据是API数据模型的机器可读描述,可用于创建功能强大的通用客户端代理和工具。其中一些可以帮助您与OData进行交互,即使您不了解有关该协议的任何信息。以下6个步骤演示了在不同编程平台上使用OData的6种有趣场景。但是,如果您不是开发人员,并且想简单地使用OData,那么XOData是您的最佳入门。

有关更多详细信息,请访问http://www.odata.org/



2

REST表示RE表象小号大老牛逼转让(BOT)这是一个以资源为基础的建筑风格。基于资源意味着将数据和功能视为资源。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.