201

OData和 REST-ful Web 服务有什么区别?

4

8 回答 8

100

更新 警告,现在 OData V4 可用,这个答案已经过时了。


不久前我在这里写了一篇关于这个主题的帖子。

正如 Franci 所说,OData 基于 Atom Pub。然而,他们在上面分层了一些功能,不幸的是在这个过程中忽略了一些 REST 约束。

OData 服务的查询功能要求您根据响应中不可用或链接到的信息构建 URI。这就是 REST 人员所说的带外信息,它在客户端和服务器之间引入了隐藏的耦合。

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

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

于 2010-03-17T00:34:40.893 回答
68

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

不同之处在于 OData 是一个特定的协议;REST 是架构风格和设计模式。

于 2010-03-16T22:03:59.553 回答
32

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

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

如果您想快速总结一下,请将其视为:

  • REST - 设计模式
  • OData - 使能技术
于 2010-03-20T19:50:03.047 回答
21

2012 年 OData 进行了标准化,所以我将在这里添加一个更新..

首先是定义:

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

OData V4——是REST的具体实现,真正定义了不同格式的消息内容(目前我认为是AtomPub和JSON)。ODataV4 遵循休息原则。

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

于 2014-12-15T15:10:16.390 回答
10

从 OData文档

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

...

OData 协议与其他基于 REST 的 Web 服务方法的不同之处在于它提供了一种统一的方式来描述数据和数据模型。

于 2012-11-27T13:50:32.397 回答
5

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

于 2016-02-18T10:55:09.990 回答
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/

于 2015-06-11T23:21:28.783 回答
3

REST代表RE表示状态传输,它是一种基于资源的架构风格。基于资源意味着数据和功能被视为资源。

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

于 2018-10-18T05:50:31.733 回答