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

时间:2014-08-31 19:35:07

标签: 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'])

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

谢谢!

2 个答案:

答案 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添加到a​​pplication.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