在研究一些Web服务时,我遇到了微软称之为OData的这种"新"技术.通过阅读他们在OData中的描述,我很难区分OData和REST-ful Web服务.有人可以帮我理解差异吗?
更新 警告,现在OData V4可用,这个答案已经过时了.
我刚才在这里写了一篇关于这个主题的帖子.
正如Franci所说,OData基于Atom Pub.但是,他们在顶部分层了一些功能,遗憾的是忽略了流程中的一些REST约束.
OData服务的查询功能要求您根据响应中不可用或链接的信息构造URI.这是REST人们称之为带外信息并引入客户端和服务器之间隐藏耦合的内容.
引入的另一种耦合是通过使用EDMX元数据来定义条目内容中包含的属性.可以在名为$ metadata的固定端点上发现此元数据.同样,客户需要提前知道,无法发现.
遗憾的是,微软认为不适合创建媒体类型来描述这些关键数据,因此任何OData客户端都必须对它正在与之交谈的服务及其接收的数据做出一系列假设.
OData协议建立在AtomPub协议之上.AtomPub协议是REST API设计的最佳示例之一.所以,从某种意义上说,你是对的 - OData只是另一个REST API,每个OData实现都是一个REST-ful Web服务.
不同之处在于OData是一种特定的协议; REST是架构风格和设计模式.
REST是一种通用设计技术,用于描述如何访问Web服务.使用REST,您可以发出http请求以获取数据.如果你在浏览器中尝试它,就像去一个网站,除了返回一个网页,你会得到回来的XML.某些服务还将返回JSON格式的数据,这些数据更易于使用Javascript.
OData是一种通过REST公开数据的特定技术.
如果你想快速总结一下,可以把它想象成:
REST - 设计模式
OData - 支持技术
2012年OData经历了标准化,所以我只是在这里添加一个更新.
首先是定义:
REST - 是一种如何通过HTTP发送消息的体系结构.
OData V4 - 是REST的一个特定实现,它真正定义了不同格式的消息内容(目前我认为是AtomPub和JSON).ODataV4遵循休息原则.
例如,asp.net人员将主要使用WebApi控制器将对象序列化/反序列化为JSON,并让javascript对其执行某些操作.Odata的观点是能够通过开箱即用的选项直接从URL查询.
从OData 文档:
OData协议是一种应用程序级协议,用于通过RESTful Web服务与数据交互.
...
OData协议与其他基于REST的Web服务方法的不同之处在于它提供了一种统一的方式来描述数据和数据模型.