¿Cómo mantienen actualizados los tipos de cambio las apps de conversión?
Un conversor se mantiene al día al guardar una observación completa, actualizarla con una cadencia controlada y conservar la hora real del dato cuando falla una consulta o el mercado está cerrado.
Un conversor fiable no pide un número en cada render. Guarda el tipo junto con source, market_session y data_updated_at, reutiliza esa observación durante un periodo corto y solo la sustituye después de una actualización correcta. La hora de respuesta indica cuándo contestó la API; la hora de observación indica cuándo cambió el tipo.
rates, sources, market_session y data_updated_at.data_updated_at para calcular la antigüedad; timestamp es la hora de construcción de la respuesta.Trata la respuesta como una sola observación
Un tipo sin metadatos es ambiguo: puede ser spot intradía, una referencia diaria o un cruce derivado. Guarda el objeto completo en vez de extraer rates.EUR y descartar el contexto. La referencia de la API define los campos y la metodología explica cómo se asignan la fuente y la sesión.
source resume la clase menos fresca en una respuesta con varias divisas. Consulta sources para cada símbolo. derived_symbols identifica los tipos calculados a través de otras divisas.
timestamp es la hora en que la API preparó la respuesta. data_updated_at es la hora de la observación subyacente. Muestra y evalúa la frescura con esta última.Define la política antes del temporizador
No existe un intervalo universal. Un precio aproximado de tienda puede compartir caché durante varios minutos; un panel puede actualizar mientras esté visible; un informe diario puede consultar una vez después del fixing necesario. Hacer una solicitud en cada render gasta llamadas y puede devolver la misma observación.
market_session puede ser open, weekend o interbank_closed. Los tipos negociados activamente pueden cambiar durante la semana; las series de referencia diaria avanzan según su calendario.
Crea una caché pequeña en el servidor
Ordena los símbolos para obtener una clave estable, guarda solo respuestas correctas y comparte una actualización concurrente. Las llamadas autenticadas deben permanecer en el servidor.
En varias instancias usa un almacén compartido o la caché del framework. El contrato no cambia: valor y metadatos juntos, sustituidos solo tras una respuesta correcta.
Un error de refresco no crea un tipo nuevo
Un timeout, un 429 o un error externo no es una observación. Conserva el dato anterior con su data_updated_at y una advertencia si el producto permite último dato válido. Sin dato previo, devuelve un error. Respeta Retry-After y usa espera exponencial con variación para fallos transitorios; un 401 requiere corregir la configuración.
Para respuestas 429, respeta Retry-After cuando exista y evita que todas las instancias reintenten a la vez. El backoff exponencial con variación sirve para fallos transitorios. Los errores de autenticación requieren corregir la configuración, no reintentos.
Un mercado cerrado es un estado válido
Durante el fin de semana, market_session: weekend puede acompañar la última observación de la semana. No sustituyas su hora por la de una nueva respuesta HTTP ni inventes cotizaciones de fin de semana.
El conversor puede alargar su caché de aplicación mientras el mercado está cerrado, pero debe actualizar después de que se reanude la semana de negociación. Basa la decisión en el estado de sesión devuelto y en los requisitos del producto, no en asumir que todas las monedas siguen un solo horario.
Convierte y redondea una vez
Con base USD, 25 USD a EUR es 25 × rates.EUR. Conserva la precisión del tipo y redondea solo el importe final según la divisa destino.
Lista de comprobación
- Solicita solo los símbolos necesarios.
- Crea una clave con base y símbolos ordenados.
- Guarda respuestas correctas completas, nunca errores HTTP.
- Evita actualizaciones concurrentes duplicadas.
- Muestra
data_updated_atcuando importe la antigüedad. - Conserva
sources,market_sessionyderived_symbols. - Mantén la clave en el servidor.
- Etiqueta el último dato válido y conserva su hora original.