Tutorial/API de tipos de cambio para Ruby on Rails API de tipos de cambio para Ruby on Rails
API de tipos de cambio para Ruby on Rails. Guía práctica con código, caché y metadatos de frescura.
Implementa esta integración en el servidor sin exponer credenciales y conserva la fuente y la hora de observación.
Puntos clave
Mantén la clave API en el servidor. Valida códigos de moneda e importes. Almacena en caché las respuestas correctas. Muestra la fuente y la hora de observación. Paso 1
Ejemplo de códigocopy
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
endPaso 2
Ejemplo de códigocopy
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
endPaso 3
Ejecuta este patrón en el servidor, valida las entradas y conserva los metadatos de la respuesta.
Paso 4
Ejecuta este patrón en el servidor, valida las entradas y conserva los metadatos de la respuesta.
Guía
Estos tipos son indicativos y no son precios de liquidación.