14

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

我正在尝试制作一个插入 RESTful API 的 Rails 应用程序。我一直在尝试确定解决此问题的最佳方法,据我所知,它缩小到从头开始制作我自己的模型,利用 ActiveModel 或利用 ActiveResource。

我不清楚每种方法的优缺点,坦率地说,我还没有完全理解 ActiveModel 和 ActiveResource 之间的区别。有人可以向我提供有关这三个选项的见解,以及在 ror 上下文中什么最“有意义”?谢谢!

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

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

4

2 回答 2

21

所以这里选择使用哪个包的关键是:

  1. 您正在从 Web API 检索数据并希望在您的服务器上存储/操作,或者
  2. 您正在通过 Web API 操作数据,并且不打算在您的服务器上存储任何内容。

如果 #1,您将需要 ActiveRecord,因为它是 Rails 的包,用于操作和存储 Postgres/MySQL/etc 数据库上的数据。

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

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

举个例子,对于我正在处理的一项服务,我从公共来源(查找邮政编码的坐标)获取了地理位置数据,然后我使用 ActiveRecord 将该数据保存到本地 Location 对象中,这样我就可以毫无延迟地重复查找它们Web API 调用。(如果你很聪明,你会不时从 Web API 刷新这些数据)

确定 ActiveResource 是否适合您

服务请求是否符合文档协议?例如,查看 Find 方法中的Expects a response of block。如果是这样,你可能会很高兴没有额外的工作。

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

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

此外,ActiveResource 已完全从 Rails 4.0 分支中删除,因此,如果您期待启动一个新的 Rails 应用程序并想要最新和最好的,这根本不是一个选择- 但所有希望都不会丢失,那里有很多宝石可以让与 RESTful 接口的交互变得更简单,比如Faraday(完全披露:我自己没有使用过 faraday,所以可以真正评论它的功效,但我在这里找到了它,还有许多其他选项。

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

如果上面的答案是否定的(它不符合),您将需要编写一个包装类,请参阅Facebooker以了解如何在积极维护的 gem 中完成此操作的示例。

参考资料: 关于 ActiveResource 的精彩教程

开始使用 ActiveRecord

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

于 2012-06-18T16:35:08.640 回答
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。

于 2012-06-18T16:41:30.020 回答