我试图制作一个插入RESTful API的Rails应用程序.我一直在努力确定最好的方法,从我所理解的,它缩小到从头开始使用自己的模型,利用ActiveModel或利用ActiveResource.
我不清楚每个的优点/缺点,坦白说,我还没有完全了解ActiveModel和ActiveResource之间的区别.有人可以为我提供关于这三个选项的洞察力,什么使得最有意义的在一个ror语境中?谢谢!
最好的答案不仅仅是说“使用ActiveModel”或者“使用ActiveResource”这样的说明,但这也是有帮助的.我真的很感谢一个答案,解释为什么我应该使用这个东西等
解决方法
>您正在从Web API检索数据,并希望
存储/操纵您的服务器,或
>您是通过Web API操作数据,不打算在您的服务器上存储任何东西.
如果#1,您将需要ActiveRecord,因为它是用于在Postgres / MysqL / etc数据库上操作和存储数据的Rails包.
如果#2,您可以专门使用ActiveResource,这将允许您从Web API检索数据,在运行时使用它,然后通过发回到Web API进行更改.
不过,很多应用程序通常会使用这两个软件包. ActiveResource很容易抓取数据,然后将其应用到ActiveRecord模型(如用户或位置等),您可以在本地使用,而无需再次从API中抓取数据.
为了给你一个例子,对于正在开发的服务,我从公共源(查找邮政编码的坐标)中获取了Geolocation数据,然后使用ActiveRecord将该数据保存到本地Location对象,所以我可以重复地查找它们,而不会延迟的Web API调用. (如果您很聪明,您将不时从网络API刷新此数据)
确定ActiveResource是否适合您
服务请求是否符合documentation协议?例如,在Find方法中查看Expects对块的响应.如果是这样,你可能没有额外的工作是好的.
注意:文档与更改日志有点不同步 – 从Rails 3.1开始:
The default format has been changed to JSON for all requests. If you want to continue to use XML you will need to set self.format = :xml in the class. eg.
此外,ActiveResource已经完全从Rails 4.0分支中删除,因此,如果您期待着启动一个新的rails应用程序,并希望最新和最好的,这根本不是一个选择 – 但是所有希望都不会丢失,那里有很多宝石与RESTful接口的交互更简单,如Faraday(完全披露:我没有使用法拉第自己,所以可以真正评论其功效,但我认为它为here,还有其他一些选择.
注意(来自上面相同的链接):活动资源基于标准的XML格式,用于通过HTTP请求和提交资源.它反映了Action Controller内置的RESTful路由器,但也可以与正确实现协议的任何其他REST服务配合使用. REST使用HTTP,但与“典型”Web应用程序不同,它使用HTTP规范中可用的所有动词.
如果上面的答案是否定(不符合),您将需要编写一个包装类,参见Facebooker,了解如何在一个主动维护的gem中完成这个操作.
参考文献:
Great tutorial on ActiveResource