Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveResource是否存在根本性缺陷?_Ruby On Rails_Rest_Activeresource - Fatal编程技术网

Ruby on rails ActiveResource是否存在根本性缺陷?

Ruby on rails ActiveResource是否存在根本性缺陷?,ruby-on-rails,rest,activeresource,Ruby On Rails,Rest,Activeresource,来自不同团队的几个开发人员独立地告诉我,ActiveResource是一个有缺陷的想法。我听到的最常见的批评是,将其设计成类似ActiveRecord的界面是一个错误。我还听到了关于错误处理方式的抱怨——或是被吞没的抱怨。一个开发人员实际上创建了自己的gem,以提供与ActiveResource(基于RESTful资源的模型框架)相同的功能 我不熟悉ActiveResource,但当我查看代码和实验并了解其工作原理时,我很难看到阻力来自何方。它似乎建立在干净、坚实的概念基础上。我甚至听说它太重了

来自不同团队的几个开发人员独立地告诉我,ActiveResource是一个有缺陷的想法。我听到的最常见的批评是,将其设计成类似ActiveRecord的界面是一个错误。我还听到了关于错误处理方式的抱怨——或是被吞没的抱怨。一个开发人员实际上创建了自己的gem,以提供与ActiveResource(基于RESTful资源的模型框架)相同的功能

我不熟悉ActiveResource,但当我查看代码和实验并了解其工作原理时,我很难看到阻力来自何方。它似乎建立在干净、坚实的概念基础上。我甚至听说它太重了!但在我的考试中,我发现它又轻又快

因此,在关于ActiveResource的所有争议中,我转向网络寻求答案。当然,肯定有很多关于为什么ActiveResource应该被屏蔽而支持X的博客文章。毕竟,我可以肯定地找到关于DataMapper是否优于ActiveRecord的文章。所以我一直在寻找我一直在寻找。。。没有什么。没有一件事。我在互联网上找不到任何一个页面对ActiveResource提出任何批评(除了对REST的全面批评)。我甚至找不到一个替代方案。它得到了Rails核心团队的支持,似乎是社区中事实上的标准

底线:


关于ActiveResource有争议吗?如果是,辩论的性质是什么?有其他选择吗?

在Rails 4.0中,ActiveResource已从Rails中提取


很多人只是使用RestClient、HTTParty或其他库。这些库通常被认为更简单、更易于使用。

我从2007年开始广泛使用ActiveResource,并在Rails从v1.2升级到v4.0期间使用ARes构建和维护了一个多服务分布式体系结构。在我看来,阿瑞斯作为一个公共图书馆在其目前的形式上存在着根本性的缺陷,但它包含了许多好的想法,可以在各个系统中使用。我讲述了我们在公司为离开战神所做的一切

人们在实践中不喜欢战神的一个重要原因是,他们不同意战神糟糕的维护或实施细节。类似于您的同事提到的处理错误消息的内容属于此类别。此外,随着时间的推移,你会发现由于不明智的一次性改进或错误修复,甚至是Rails内部的变化(例如,在去年的攻击中,我们的ARes系统遭受了灾难性的崩溃)而出现意外的故障。但所有这些都可以通过更好的维护和更好的视野来改进,将这些问题与基本问题分开是很重要的

我逐渐相信的是,Yehuda在上面的评论中暗示,ARes失败是因为RESTAPI没有一般的具体语义。即使利用最好的Rails约定,HTTP API语义充其量也是脆弱的

与ActiveRecord不同的是,它生成SQL:一种用于选择数据行的定义良好的声明性语言。SQL基于关系模型,它根据不同的子句为我们提供了查询含义的数学定义。这一数学基础允许类似Arel的东西在ruby中创建一个可组合的SQL DSL。在SQL数据库中,任何语法正确的查询都可以执行(即使它太慢而不实用),因为该引擎被设计为正式解析SQL语句并将其映射到操作和获取底层数据的可证明正确的实现。因此,当您在此基础上构建一个类似于ORM的ActiveRecord时,您在底层系统中有很强的保证。如果生成有效的SQL,引擎将保证其正常工作;如果生成无效的SQL,引擎将返回错误。即使SQL标准化了,也值得注意的是,每个数据库都有一个单独的ActiveRecord适配器,以确保正确性和到ActiveRecord功能的正确映射。其中每一个都使用一个底层驱动程序来保证对正在运行的数据库执行正确的wire协议。所有这些代码背后都有大量的规范和维护,所有这些都支持当今ActiveRecord的良好优雅性和可靠性

现在考虑HTTP API和它的支持吗?它可能是太阳底下的任何数据库技术,也可能根本没有!它很可能是内部编写的,只提供业务功能所需的内容。与在其模式中包含有关通用查询操作的所有必要信息的数据库不同,HTTP API与任何底层存储机制或业务逻辑完全解耦。即使API提供了如何使用查询参数的标准,也没有关于哪些过滤器或排序选项可用的自文档定义。见鬼,即使是检查参数的有效性也不能保证,因为API通常只会吞掉或忽略无效的参数

尽管如此,阿瑞斯非常方便,但它是建立在流沙之上的。它使用的想法和惯例很方便,但它们缺乏连贯的愿景和可靠的稳定性。就我个人而言,我认为,使用自己的约定和可靠的规范来实现您的战神并不是不合理的

在建立一个类似ARES之类的东西的基础上,Yehuda Katz和Steve Klabnik的优秀规范是一个伟大的社区项目,它将为这个基础提供一个非常重要的基石。但是值得注意的是,在语义保证和可派生功能方面,它仍然没有接近特定的数据库驱动程序。我怀疑,一个真正好的利用JSON-API的类似ARes的库将与今天的embra相比有很大的不同