初始化API的好地方在哪里?

nah*_*nam 4 ruby-on-rails coinbase-api

我想使用这个api:https://github.com/coinbase/coinbase-ruby,第一步是初始化API,如下所示:

coinbase = Coinbase::Client.new(ENV['COINBASE_API_KEY'], ENV['COINBASE_API_SECRET'])
Run Code Online (Sandbox Code Playgroud)

我想知道放置此代码的最佳位置是什么,如果我把它放在那里,我将如何访问它?我希望这个变量(coinbase)可以在应用程序中随处访问.

谢谢!

pdo*_*obb 12

这个问题的答案实际上取决于您的用例和方法.但是,我的建议是创建一个服务对象(在DDD意义上)(参见该链接中名为"域对象不应该知道任何关于基础结构的内容"一节),它处理与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
Run Code Online (Sandbox Code Playgroud)

那么你可能会这样做,例如:

# From MyController#action_1
if CoinbaseService.do_something
  # ...
else
  # ...
end
Run Code Online (Sandbox Code Playgroud)

要么:

# From MyModel
def do_something
  CoinbaseService.do_something_else
end
Run Code Online (Sandbox Code Playgroud)

要使服务对象正常工作,您可能需要app/services在application.rb文件中添加自动加载路径.我通常只是添加这个:

# config/application.rb
config.autoload_paths += %W(#{config.root}/app)
Run Code Online (Sandbox Code Playgroud)

我发现这种服务对象方法在组织上非常有益,效率更高(只需要调用1个新的Coinbase客户端),更容易测试(易于模拟调用Coinbase::Client),而且非常快乐:).