Ответ на этот вопрос действительно зависит от вашего варианта использования и вашего подхода. Однако моя рекомендация состоит в том, чтобы создать Service Object (in the DDD sense) (см. Раздел «Объекты домена не должны знать ничего об инфраструктуре внизу» в этой ссылке), который обрабатывает всю связь с API Coinbase. И затем, в рамках этого объекта службы, вы можете просто инициализировать объект 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
), и просто радостный :).
Вам нужна коинбаза как глобальная переменная в вашем приложении? – Surya