OData的缺点?
我正在研究如何将OData用于我们的Java RESTful Web服务。 对于使用OData来说,我有很多好处,因为它们是一个很好的参数。 但是,读了很多关于OData的论文,我还没有看到任何缺点列表,以作出最终决定。
有谁知道使用OData(odata4j在这个例子中)的缺点?
谢谢
莎拉
一些查询根本无法执行,并最终创build视图 – 例如看到这个post: WCF服务操作返回一个对象图 。 这是因为你不能过滤扩展的logging,比如说你有订单的人,你想要所有的人和他们的蛋糕订单; 如果你开始你的OData查询,并扩大订单,你可以得到所有订购蛋糕的人,但是,你也可以得到所有的订单,而不仅仅是蛋糕。 大多数情况下,这不是问题,因为你可以把查询的头部,即从命令开始,扩大人员。 有时虽然不能完成,但你需要创build一个视图。
没有与SQL相当的东西,你必须用很多的方法来完成这个任务。
聚合,你必须再打一个OData操作,或者做他们的客户端,如果你想页面数据,并显示聚合,这是没有用的。
尝试坚持使用JSON,ATOM过分膨胀与实际的数据占据一小部分数据包大小
根据您的服务 – 隐藏和无用的错误消息,你通过OData更新职位爬行试图找出究竟是什么导致了错误。
如果我能再想一想,我会回来添加它们。
你原来的post已经很长时间了,也许你自己也发现了一些其他的缺点?
在我看来OData(面向公共互联网)的缺点是客户端可以添加到URL的查询参数来过滤显示的饲料。 OData允许客户端实质上对数据执行数据库调用/逻辑以将“定制”的订阅源返回给它们。
这将客户端耦合到提要,他们需要事先知道他们可以使用和过滤(我认为这是违背REST发现概念)。 此外,这意味着他们正在使用它,你不能真正看到/控制的意思,他们的客户端应用程序可以非常紧密地耦合到您的供稿和数据库调用/逻辑附加到它(有很多方法可用为客户端使用的url)。
在受控制的环境中,或者只有less数消费者的情况下,这对Odata来说可能是有利的,因为它对于最终用户来说是容易和强大的。
但是,在我看来,如果公开曝光,无论何时您需要更改Feed或升级,都可能会让您头疼,因为您必须确保不会破坏任何“未知”实现。 如果function可用,人们将使用它。 。 。
目前,此function无法禁用,但默认情况下可用。
一个缺点是,你不能编写自己的,专有的,繁琐的API和与之相关的文档,以便消费者知道如何针对你的服务编写查询。
不,等等 – 这不是一个真正的缺点,所以我想我真的没有想到任何权利。 <grin />
为了扩展这个答案并将其与SOAP进行比较:
SOAP也是一个完全可以接受的方法,是一个公开的标准。 但是,由于REST提供了使用HTTP动词的轻量级无状态访问,而且OData只是一组用于通过一种通用方法访问不同REST服务的URI约定,而且由于原始海报正在描述Java RESTful Web服务,在REST和OData的上下文中的面颊响应。 另外:OData不需要WSDL,因为规范对于所有的OData服务都是通用的,服务本身(当遵守规范时)描述了数据产品。
[从我对这个答案的评论。
从V2开始,我所看到的唯一缺点就是缺乏查询function,而不是一对多的关系。 因此,如果模型中的作者和文章能够在查询中查询具有作者属性的文章,但却不能相反:您无法查询具有特定文章的作者。
从OData V2 Any开始,所有运算符也都不受支持,但在V3中解决(基于初步但封闭的规范)
特别是对于OData和Java4Odata,我认为存在一些兼容性问题。 我们正在公开OData,并让另一个团队从Java中使用它。 他们并不是很高兴,显然在邮件列表上有很多讨论。
另外,OData似乎没有像微软预期的那样受欢迎(承诺)。 所以,如果有消费者能够匹配生产者,那么这些优势才真正存在。 例如,OData为您提供导航和查询数据范例,但如果不使用它们,剩下的是什么?
如果没有真正的完全消费者和多种语言的生产者,OData就像任何其他专有协议一样好。
当考察优势与劣势时,可以抽象地考虑事物,也可以参考特定的项目或场景。
抽象地说一下,就必须思考“标准”的价值。 标准就像美元,政府和边界……它们只存在于人们相信它们存在的地步。 否则,钱就只是纸张(或在数字时代,数字)。 所以问题就变成了这个问题,这个问题有多广泛呢? 虽然我的初步调查显示不会出现任何无处不在的技术,但我也是这样想的。 人们正在大量采用各种新技术。
然后,在具体情况中,您可能会发现自己与MongoDB(我相信,非常相似)等替代方法进行比较,特别是针对贵组织的感受需求。 再次,这是我来这里找出来的。
我的想法是,重要的趋势是远离将已经呈现的线路发送到HTML,而是将数据作为JSON的一些变体发送,并提供将由浏览器用来呈现它的Javascript。 随着各种JSON变体的驱动程序的出现,在一个或另一个之间进行切换将是微不足道的。 这里有一个出来oData:
http://www.rssbus.com/ado/odata/
我明白,这将允许你假装你正在处理Sql Server。 我想我们会看到更多类似于JSON的图层的抽象,从而允许从“标准”中获得更大的自由度。 但是,这就是我在这里find的。
我不具体了解ODataJ4。 我知道在http://www.odata.org/有一些资源,包括odata的生产者和消费者名单以及已知支持它的语言列表。; OData确实在其领域有其局限性,并取决于您使用的协议版本。 从许多实现中,OData仍在开发中,以完全支持这些版本。 所以,如果你是在协议的第三版中获得额外的东西之后,我想你会发现一些实现还没有完成。
除了某些供应商缺乏function之外,我能想到的唯一事情就是缺乏灵活性(如果这是不利的)。 通常在OData中有一种方法可以做一些事情。
我只想指出,odata是在微软的Open Specification Promise下发布的,并且没有任何意图使用这个协议。
我希望有帮助