我想使用这个api:https://github.com/coinbase/coinbase-ruby,第一步是初始化API,如下所示:
coinbase = Coinbase::Client.new(ENV['COINBASE_API_KEY'], ENV['COINBASE_API_SECRET'])
我想知道放置此代码的最佳位置是什么,如果我把它放在那里我将如何访问它?"那里"?我希望这个变量(coinbase)可以在应用程序中随处访问。
谢谢!
答案 0 :(得分:10)
这个问题的答案实际上取决于您的用例和方法。但是,我的建议是创建一个Service Object (in the DDD sense)(请参阅该链接中名为“域对象不应该知道任何关于基础结构的内容”部分),该部分处理与Coinbase API的所有通信。然后,在此服务对象中,您只需初始化Coinbase :: Client对象一次,无论您多次调用它。这是一个例子:
# app/services/coinbase_service.rb
class CoinbaseService
cattr_reader :coinbase_client, instance_accessor: false do
Coinbase::Client.new(ENV['COINBASE_API_KEY'], ENV['COINBASE_API_SECRET'])
end
def self.do_something
coinbase_client.do_something_in_their_api
end
def self.do_something_else
coinbase_client.do_something_else_in_their_api
end
end
那么你可能会这样做,例如:
# From MyController#action_1
if CoinbaseService.do_something
# ...
else
# ...
end
或者:
# From MyModel
def do_something
CoinbaseService.do_something_else
end
要使服务对象正常工作,您可能需要将app/services
添加到application.rb文件中的自动加载路径。我通常只是添加这个:
# config/application.rb
config.autoload_paths += %W(#{config.root}/app)
我发现这种服务对象方法在组织上非常有益,效率更高(只需要调用1个新的Coinbase客户端),更容易测试(易于模拟调用Coinbase::Client
),而且非常快乐:)
答案 1 :(得分:4)
通过在 config / initializers / coinbase.rb 中创建初始化程序,可以像在初始化Rails应用程序中那样创建全局变量的一种方法:
$coinbase = Coinbase::Client.new(ENV['COINBASE_API_KEY'], ENV['COINBASE_API_SECRET'])
现在,您可以在应用程序的任何位置访问$coinbase
!