在Rails 4中组织外部API调用 - 模块还是类?

shr*_*roy 6 ruby ruby-on-rails call shared-libraries ruby-on-rails-4

我正在创建一个Rails应用程序,它将使用相当多的外部API,如SalesForce,FolderGrid(如Dropbox)等,这些都将同步到我的数据库.我从未使用外部api调用,所以我创建了一些基本的Ruby脚本,使用分散的方法来测试对这些资源的调用.现在我想用我的完整Rails应用程序实现它们.

到目前为止,我开始在我的/ lib文件夹中创建一个目录来保存api调用模块/类.

/lib/apis/foldergrid.rb

现在我不确定组织代码的最佳方法是什么.在我的独立Ruby脚本中,我有方法authenticating, creating a folder, auditing files, downloading files等.

什么应该在模块中?我甚至需要一个模块吗?班上应该怎么做?如何确保我可以在需要的模型和控制器中使用这些方法?是否有关于外部API的最佳实践?

任何资源,链接和/或更深入的理解都受到高度赞赏.

cre*_*son 6

我有一个应用程序也可以这样做(从多个API中提取数据),所以我可以告诉你我会做什么(或者在某些情况下,如果我重新开始,我现在会做什么).

数据存储

首先,如果您已经将从这些数据中提取的数据保存到Rails应用程序中,那么您将拥有代表数据本身的模型.除非您的控制器负责调用API,否则这就是您在控制器中引用的内容.

尽可能使用宝石

其次要确保利用现有API的现有宝石,这样你就不会重新创建身份验证轮,解析应用程序的JSON等等.例如:salesforce 有一个rest-force gem.

使用Lib中的Ruby对象在模型和API响应之间进行映射

第三,我会将API响应和模型之间的数据映射到"普通旧红宝石对象"并将它们存储在一个lib/apis文件夹中(在这些情况下不需要存储在模块中,但恕我直言).它们最终可能非常实用,在映射数据的情况下,这是可以的.

没有现有Gems的API

在这些情况下,我肯定会将它们保存在一个模块下的一个或多个类中,位于lib中的自己的文件夹中.这样你就可以把它们解析出来作为一个宝石(如果你花时间让它们成为一个宝石开始,我相信其他人可能会受益).我本周刚开始使用Infoconnect的API开始这条路,它没有Gem(或任何语言的任何代码示例).但我不是很远.

如果需要,为V和C之间的代码创建服务对象(视图和控制器)

如果你最终需要做任何事情来与用户交换API信息或任何调用这些请求的东西,我会把它们放在服务对象中,这样你的代码就不会在视图或控制器中变得臃肿.