作为这个问题的前言:我对Rails开发(以及一般的网络开发)是全新的,我的一些担忧可能没有根据,所以任何反馈都会非常有用。
我正在尝试创建一个插入RESTful API的Rails应用程序。我一直在努力确定最好的方法,从我的理解,它缩小到从头开始制作我自己的模型,利用ActiveModel,或利用ActiveResource。
我不清楚每个的优点/缺点,坦率地说,我还没有完全理解ActiveModel和ActiveResource之间的区别。有人可以向我提供有关这三个选项的见解以及在最佳环境中最具“意义”的内容吗?谢谢!
最好的答案不仅仅是说“使用ActiveModel”或“使用ActiveResource”这样做的说明,但这也会有所帮助。我真的很感激答案,解释为什么我应该使用那个东西,等等。
我正在处理的一些限制是,当我调用API时,我需要使用密钥,并且大量的API调用将包含其他参数。
答案 0 :(得分:21)
因此,选择在此使用哪个包的关键是:
如果#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)
我会尝试一下,希望其他人会来纠正(或添加)它,这样就会有更好的画面......
我看到两者之间存在以下主要差异:
要使用ActiveResource,您必须检查本地Rails应用程序是否可以与远程应用程序通信,以便RESTful API兼容。
如果两个选项都可以自由选择,这里有一些参数:
所以最后,它取决于你是想存储某些东西(ActiveModel)还是只检索一些东西(ActiveResource),这意味着你将使用ActiveResource和(可能)ActiveMiodel。