ActiveResource和ActiveModel有什么区别?

时间:2012-06-15 23:50:53

标签: ruby-on-rails-3 activerecord activemodel

作为这个问题的前言:我对Rails开发(以及一般的网络开发)是全新的,我的一些担忧可能没有根据,所以任何反馈都会非常有用。

我正在尝试创建一个插入RESTful API的Rails应用程序。我一直在努力确定最好的方法,从我的理解,它缩小到从头开始制作我自己的模型,利用ActiveModel,或利用ActiveResource。

我不清楚每个的优点/缺点,坦率地说,我还没有完全理解ActiveModel和ActiveResource之间的区别。有人可以向我提供有关这三个选项的见解以及在最佳环境中最具“意义”的内容吗?谢谢!

最好的答案不仅仅是说“使用ActiveModel”或“使用ActiveResource”这样做的说明,但这也会有所帮助。我真的很感激答案,解释为什么我应该使用那个东西,等等。

我正在处理的一些限制是,当我调用API时,我需要使用密钥,并且大量的API调用将包含其他参数。

2 个答案:

答案 0 :(得分:21)

因此,选择在此使用哪个包的关键是:

  1. 您正在从Web API中检索数据并希望这样做 在您的服务器上存储/操作,或
  2. 您正在通过网络API操纵数据,而不打算在您的服务器上存储任何内容。
  3. 如果#1 ,您将需要ActiveRecord,因为它是用于在Postgres / MySQL / etc数据库上操作和存储数据的Rails包。

    如果#2 ,您可以独占使用ActiveResource,这样您就可以从Web API检索数据,在运行时使用它,然后通过回发到Web API进行更改。 / p>

    但是,许多应用程序通常都会使用这两种软件包。 ActiveResource可以非常轻松地获取数据,然后将其应用于ActiveRecord模型(如用户或位置等),您可以在本地使用这些模型,而无需一遍又一遍地从API中获取数据。

    举个例子,对于我正在处理的服务,我从公共源抓取Geolocation数据(查找zipcodes的坐标),然后我使用ActiveRecord将该数据保存到本地Location对象,这样我就可以重复查找它们了没有Web API调用的延迟。 (如果您很聪明,您将不时从Web API刷新此数据)

    确定ActiveResource是否适合您

    服务请求是否符合documentation协议?例如,查看在Find方法中预期块的响应。如果是这样,你可能会没有额外的工作。

    注意:文档与更改日志有点不同步 - 从Rails 3.1开始:

      

    所有请求的默认格式都已更改为JSON。如果要继续使用XML,则需要在类中设置self.format =:xml。例如

    此外,ActiveResource已完全从Rails 4.0分支中删除,因此如果您期待启动新的rails应用程序并希望获得最新且最好的,这根本不是一个选项 - 但是所有的希望都没有丢失,有很多宝石可以简化与RESTful接口的交互,比如Faraday(完全披露:我自己没有使用法拉第,所以可以真正评论它的功效,但我找到了它here,还有其他一些选择。

    注意(来自上面的相同链接): Active Resource构建在标准XML格式上,用于通过HTTP请求和提交资源。它反映了内置于Action Controller中的RESTful路由,但也可以与正确实现协议的任何其他REST服务一起使用。 REST使用HTTP,但与“典型”Web应用程序不同,它使用HTTP规范中提供的所有动词。

    如果上面的答案是没有(它不符合),你需要编写一个包装类,请参阅Facebooker,了解如何在积极维护宝石。

    参考文献: Great tutorial on ActiveResource

    Getting started with ActiveRecord

    请记住,如果您刚刚开始进行Web开发,那么您还需要了解数据库和模型基础知识 - 您的工作已经完成了。 :)

答案 1 :(得分:1)

我会尝试一下,希望其他人会来纠正(或添加)它,这样就会有更好的画面......

我看到两者之间存在以下主要差异:

  • ActiceResource为(通常)(Rails)RESTful API远程访问的资源提供接口。它不是存储在本地,而是仅由API读取,更新,创建和删除。正如Ryan Bates所述:“ActiveResource允许您在多个Rails应用程序之间轻松通信。”
  • ActiveRecord(或现在的ActiveModel)将其记录(或模型)本地存储在数据库中,并允许其他人通过Web界面远程访问它
    • 显示页面
    • 返回JSON地图或
    • 返回XML结构

优点和缺点

要使用ActiveResource,您必须检查本地Rails应用程序是否可以与远程应用程序通信,以便RESTful API兼容。

如果两个选项都可以自由选择,这里有一些参数:

  • ActiveResource通常比ActiveModel更昂贵(调用远程系统至少花费更多时间)。
  • ActiveModel将花费您自己的资源(至少设置数据库),但这通常不是负担。

所以最后,它取决于你是想存储某些东西(ActiveModel)还是只检索一些东西(ActiveResource),这意味着你将使用ActiveResource和(可能)ActiveMiodel。