所以这里选择使用哪个包的关键是:
- 您正在从 Web API 检索数据并希望在您的服务器上存储/操作,或者
- 您正在通过 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 开发,您还需要了解数据库和模型基础知识——您的工作已经完成。:)