2014-08-31 5 views
1

Я хотел использовать этот API: https://github.com/coinbase/coinbase-ruby и первый шаг для инициализации API, как это:Где хорошее место для инициализации API?

coinbase = Coinbase::Client.new(ENV['COINBASE_API_KEY'], ENV['COINBASE_API_SECRET']) 

Мне было интересно, что лучшее место, чтобы поставить этот код, и как бы я к нему доступ, если Я сказал «там»? Я хочу, чтобы эта переменная (coinbase) была доступна ЛЮБОЙ в приложении.

Спасибо!

+0

Вам нужна коинбаза как глобальная переменная в вашем приложении? – Surya

ответ

4

Один из способов идти о том, глобальную переменную можно сделать подобно тому, как инициализируется Redis в приложении Rails, создавая инициализатор в конфигурации/инициализаторах/coinbase.rb с:

$coinbase = Coinbase::Client.new(ENV['COINBASE_API_KEY'], ENV['COINBASE_API_SECRET']) 

Теперь, вы можете получить доступ к $coinbase в любом месте приложения!

+0

Работает как очарование! – nahtnam

7

Ответ на этот вопрос действительно зависит от вашего варианта использования и вашего подхода. Однако моя рекомендация состоит в том, чтобы создать 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), и просто радостный :).

Смежные вопросы