前提・実現したいこと
楽天API等の外部APIを使用したアプリを作成しています。
現在の設計方針ではAPIを利用する機能をクラスにまとめています。
そして、アプリIDやApiKeyをクラス変数またはinitializeで設定して、それらをapiを使用するメソッドで使い回しています。
使用方法としては、Controllerのbefore_actionで上記のクラスのインスタンスを生成し、各アクションでそのインスタンスメソッドを呼び出しています。
規模は小さいので気にする必要がないかもしれませんが、もっと良い(適した)設計があれば教えていただきたいです。
試したこと
module化やconcernでの実装を考えたのですが、クラスで実装しているようにapikey設定を一ヶ所にまとめる方法が思い付きませんでした。
追記
発生するエラー:
Payjp::AuthenticationError: No API key provided. Set your API key using "Payjp.api_key = <API-KEY>".
現状の問題点
- コンソールで確認したところ、
PayjpObject::Client.api_key=nil
になっていました。 - PayjpObject::Client.request、PayjpObject::Subscription.createにはそれぞれ何を記載すれば良いのでしょうか
- PayjpObject::Subscription.createに引数を与えるにはどうすれば良いのでしょうか
PayjpのAPIを使用したソースコードは以下になります。
・config/initializers/payjp_object_client.rb
PayjpObject::Client.api_key = ENV["PAYJP_SECRET_KEY"];
・controllers/concerns/payjp_object/client.rb
module PayjpObject class Client class_attribute :api_key def self.request Payjp::Subscription.create end end end
・controllers/concerns/payjp_object/subscription.rb
ruby
1module PayjpObject 2 class Subscription 3 def self.create(attrs) 4 Client.request(Payjp::Subscription.create).map { |attrs| Subscription.new attrs } 5 end 6 7 def find_by(attrs) 8 Client.request(Payjp::Subscription.find_by).map { |attrs| Subscription.new attrs } 9 end 10 end 11end
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 04:29