我有一个可与多个 3rd 方 API 配合使用的 rails 应用程序。其中一些 API 受到速率限制,许多 API 的方法可能需要数小时才能完成,您必须不断检查您的请求是否已准备好。因此,我建立了一个排队系统来管理所有的行李。
进入此队列的每个请求都有一个 JSON 字符串,其中详细说明了请求所属的第 3 方 API、哪种方法、哪些参数以及处理响应的回调。我将需要很多回调方法,它们处理截然不同的任务。一些更新第 3 方的服务状态,一些更新客户信息,一些创建另一个排队请求以下载大型 CSV 或解析 CSV,等等。
我不确定将所有这些不相关的回调方法放在哪里。它们种类繁多,并且涉及许多不同的模型,以至于我不确定将它们置于 QueuedRequest 模型下是否正确(尽管这似乎是最简单的,尤其是在测试方面)。我想将它们合并在一个地方(再次使测试更容易),因此试图将它们硬塞到相关模型中(尽管它们通常可能根本与模型无关)是行不通的。
各种实用程序类似乎是最好的地方,但我会把那个文件放在哪里?
详细信息: Rails 3.2.6
更新:为了详细说明下面的答案,我最终做的是在 /lib/api.xml 中放置一个实用方法模块。我在 /config/application.rb 中将 /lib/api 添加到我的 autoload_paths 中,并且未提及,我创建了一个初始化程序来为我将模块加载到我的应用程序中。
/lib/api/callbacks.rb
module Callbacks
extend self
def some_method
# magic
end
end
/config/application.rb
config.autoload_paths += %W(#{config.root}/lib/api)
/config/initializers/application.rb
require 'callbacks'