私のプロジェクトでは、外部サービスと対話するために次の小さなライブラリを使用しています:
class ExternalServiceInteraction
include Singleton
URL = Rails.env.production? ? 'https://first.production.url.com' : 'http://sandbox.url.com'
API_KEY = Rails.env.production? ? 'qwerty' : 'qwerty'
DOMAIN = Rails.env.production? ? 'prod.net' : 'stage.net'
def connection
conn = Faraday.new(url: URL) do |faraday|
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
end
def return_response(item=true)
if @resp.status == 200
response = item ? Hash.from_xml(@resp.body)['xml']['item'] : Hash.from_xml(@resp.body)['xml']
else
response = Hash.from_xml(@resp.body)['xml']['error']
Rails.logger.info "response_error=#{response}"
end
response
end
def get_subscribers
path = 'subscribers'
data = { 'X-API-KEY' => API_KEY, 'domain' => DOMAIN }
@resp = connection.get(path, data)
return_response
end
def get_subscriber(physical_id)
path = 'subscriber'
data = { 'X-API-KEY' => API_KEY, 'Physical_ID' => physical_id, 'domain' => DOMAIN }
@resp = connection.get(path, data)
return_response
end
# and so on
end
最初の URL を介した対話サービスでエラーが発生した場合、「https://second.production.url.com」を使用したいのですが、これを設定するにはどうすればよいですか?
最初に、サーバーから ping / get 200 ok を試みましたが、これが失敗した場合は、2 番目の URL に切り替えます。ただし、サーバーが稼働中で、200 OK を返しても、API に到達できない場合があります。私の主な問題は、エラーをキャッチしてライブラリの別の URL でメソッドを再実行する方法がわからないことです。