튜토리얼/Ruby on Rails용 환율 API Ruby on Rails용 환율 API
Ruby on Rails용 환율 API. 코드, 캐시, 최신성 메타데이터를 포함한 실용 가이드입니다.
자격 증명을 노출하지 않고 서버에서 구현하며 출처와 관측 시각을 보존합니다.
단계 1
코드 예제copy
require "net/http"
require "json"
class ExchangeRateClient
Error = Class.new(StandardError)
def convert(from:, to:, amount:)
from = from.to_s.upcase
to = to.to_s.upcase
raise Error, "invalid currency code" unless [from, to].all? { |code| code.match?(/A[A-Z]{3}z/) }
key = ["fx-convert", from, to, amount.to_d.to_s("F")]
Rails.cache.fetch(key, expires_in: 60.seconds) do
uri = URI("https://api.exchangerate.dev/v1/convert/#{from}/#{to}/#{amount}")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer #{ENV.fetch("EXCHANGERATE_API_KEY")}"
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true,
open_timeout: 2, read_timeout: 5) { |http| http.request(request) }
raise Error, "exchange-rate API returned #{response.code}" unless response.is_a?(Net::HTTPSuccess)
JSON.parse(response.body)
end
rescue Net::OpenTimeout, Net::ReadTimeout => error
raise Error, "exchange-rate API timed out: #{error.class}"
end
end단계 2
코드 예제copy
class ConversionsController < ApplicationController
def show
amount = BigDecimal(params.require(:amount))
result = ExchangeRateClient.new.convert(
from: params.require(:from).upcase,
to: params.require(:to).upcase,
amount: amount
)
render json: result.slice("from", "to", "amount", "rate", "converted",
"source", "market_session", "data_updated_at")
rescue ExchangeRateClient::Error, ArgumentError => error
render json: { error: error.message }, status: :bad_gateway
end
end단계 3
서버에서 실행하고 입력값을 검증하며 응답 메타데이터를 보존하세요.
단계 4
서버에서 실행하고 입력값을 검증하며 응답 메타데이터를 보존하세요.
가이드
이 환율은 참고용이며 결제 가격이 아닙니다.