当我有JSON时,Odata有什么需求?


23

我试图了解Odata的意义以及何时才有意义。现在,我的工作方式是使用ASP.NET和MVC / WebApi控制器将对象序列化/反序列化为JSON,并让javascript对其进行处理。

据我所知,OData的优点是能够直接从URL查询...但是由于我正在编写客户端和服务器代码,因此不需要这样做。

有人会用JavaScript解析ODaya查询的结果吗?

也许OData更多地是为所有客户端提供通用终结点,以便从JSON不提供的查询中获取详细信息?因此,如果我是数据提供者,那么我想那是odata的作用吗?

帮助我了解REST / JSON / ODATA的目的和用途。


2
为了使事情“更轻松”,您可能也对链接数据链接数据平台SPARQL数据目录词汇感兴趣。它们都是不同的东西,可以用于不同的目的,并且可以与JSON结合使用,例如SPARQL 1.1查询结果JSON格式,当然还有REST
Trylks

Answers:


42

JSON只是基于JavaScript的数据交换格式。

REST是一种体系结构样式,而OData是REST的特定实现,旨在生成和使用数据,它支持两种格式:AtomPub和JSON。

因此,JSON与普通REST和OData之间的区别是OData中用于数据操作的选项,例如,如果我们使用OData协议查询数据,则可以在URI中指定以下选项,

  • $ orderby
  • $ top
  • $跳过
  • $过滤器
  • $格式
  • $选择

我们可以进行投影,链接资源等,所有这些选项都是开箱即用的。现在想象一下,如果我们必须在自己的REST服务中提供所有这些功能,那么我们将不得不,

  • 实施所有这些
  • 为不同的操作创建我们自己的约定/关键字

这不仅需要大量工作,而且还会导致不一致,并为我们的数据使用者创建学习曲线。


5

JSON或JavaScript对象表示法仅仅是数据的格式或标准。这是一种公认​​的格式,用于传输诸如登录名之类的内容或需要由REST服务使用的内容。

参见此部分:http : //en.wikipedia.org/wiki/JSON

尽管JSON最初是从JavaScript脚本语言派生的,但它是一种与语言无关的数据格式,并且用于解析和生成JSON数据的代码很容易在各种编程语言中获得。

它不是任何特定编程语言的一部分,因此,如果不同的系统知道使用的是JSON,则可以轻松地传递数据。

对于REST,它只是用于Web服务的一种体系结构样式。

参见此部分:http : //en.wikipedia.org/wiki/Representational_state_transfer

考虑这一点的一种方法是,如果您想编写一个Web服务,许多不同的计算机都可以与之对话并交换信息。您可以编写Web服务以通过URL接受数据

 http://www.myservice.com/specialRESTService?name=punkouter

返回的响应可能是一个JSON对象,表示已收到您的数据。

{
    "name": "punkouter",
    "status": "service downloaded your data",
}

我从未听说过OData,所以我用Google搜索了它:

OData基于AtomPub协议和JSON构建,其中Atom结构是包含从每个OData请求返回的数据的信封。OData请求将REST模型用于所有请求。每个REST命令都是一个POST,GET,PUT,PATCH或DELETE http请求(映射到CRUD),其中命令的详细信息位于url中。

GET:获取实体的集合(作为提要文档)或单个实体(作为输入文档)。

POST:从输入文档创建新实体。

PUT:使用输入文档更新现有实体。

补丁:使用部分录入文档更新现有实体。

删除:删除实体。

听起来好像OData是为了增强原始的REST风格体系结构而编写的。但是,看起来它可以为您提供一些新的东西,而不必用C#或使用任何语言从头开始编写东西。

如果您正在努力使用OData,那么您仍将使用JSON ..,但仍在Microsoft等人编写的OData框架/标准之内。

有人会在javascript中解析OData(sic)查询的结果吗?

是的,因为(听起来像)它使用的是JSON。使用JS是完全自然的。

也许OData更多地是为所有客户端提供通用终结点,以便从JSON不提供的查询中获取详细信息?因此,如果我是数据提供者,那么我想那是Odata的目的吗?

Odata将提供REST服务..但在普通的“通用” REST服务端点之上添加了一些附加的标准服务..客户端不在乎您是使用OData还是滚动自己的C#服务。因为响应采用的是约定的格式(例如JSON)。但是,为了您的工作,他们可能想使用OData,因为它提供了许多“开箱即用”功能。


工作不在乎..我只是想知道Odata的用途是什么..JSON只是表示数据的一种方式..ODATA也是如此....但是我想我有一个问题是什么情况在哪里使用REST和返回JSON是不够的..和使用ODATA将是一个优势?
punkouter

不,不,OData是一个RESTful服务体系结构...使用JSON表示数据。通过使用OData库/标准,您将一无所获..从技术上讲,您自己无法编写的任何东西..但是,如果您使用OData构建东西,那么使用OData可以节省您的时间..而不是自己编写东西
Erik

json吗?但是在我看来,OData返回XML?还是两者?我糊涂了。
punkouter


从您的链接“ OData支持两种格式来表示它公开的资源(集合,条目,链接等):基于XML的Atom格式和JSON格式。”
Erik

2

对于“为什么”问题,RESTful Web API一书中有一个非常好的定义-OData本质上实现了一种收集模式,其中收集是一种资源,它通过链接提供资源列表。


2

OData是具有接口标准的RESTful服务的特定实现。优势在于,当您公开产品的API并说它符合OData标准时,对于已经熟悉OData的用户来说,可以轻松使用它,而无需花费大量时间阅读API文档。

缺点:尽管OData在公开基础数据库方面非常出色,但该规范不包括对事务的支持,并且不能在我们可以将RESTful服务用作数据库接口和事务接口的应用程序中使用。

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.