Centre d’aide/Finance & settlements/Exchange rates : un appel d’API par jour, et un repli qui ne demande aucune clé
06Finance & settlements2 min de lecture

Exchange rates : un appel d’API par jour, et un repli qui ne demande aucune clé

Le job de rafraîchissement quotidien, les deux sources derrière lui, et l’historique qui sait encore dire quel taux était en vigueur un mardi de mars.

Les exchange rates sont le genre d’infrastructure à laquelle personne ne pense, jusqu’au jour où un settlement est en dollars et où quelqu’un demande d’où sort 1,0847. La réponse de la plateforme est volontairement petite : un job, un cache, une table d’historique, et une page admin avec trois commandes dessus.

Un job, une fois par jour

Un cron appelle /api/cron/refresh-rates à 07:00 UTC — 08:00 en heure d’Europe centrale. Il récupère les derniers taux basés sur l’EUR, ne garde que les paires dont la devise figure au catalogue, et les écrit dans le cache de taux : une ligne par paire de devises, remplacée à chaque rafraîchissement. Les conversions croisées se calculent au runtime à partir de ces paires EUR, ce qui explique qu’un seul appel d’API par jour couvre tous les tenants de la plateforme. Un bouton Actualiser existe pour les matins où attendre demain n’est pas une option.

Deux sources, dont une gratuite

La source principale est ExchangeRate-API : 161 devises, mises à jour quotidiennes, et une clé API que l’équipe plateforme stocke une fois pour toutes. Sans clé — ou quand l’appel principal revient vide — le job bascule sur Frankfurter, qui sert les taux de référence de la Banque centrale européenne : 31 devises, publiées chaque jour à 16:00 CET, sans clé requise. Le repli est automatique, et chaque rafraîchissement enregistre quelle source a réellement livré les chiffres, si bien qu’une journée maigre en taux s’explique d’elle-même au lieu de ressembler à un bug.

L’interrupteur, et ce qui se passe quand il est éteint

/admin/exchange-rates appartient à l’équipe plateforme ; tous les autres reçoivent la page d’accès restreint. On y trouve la clé API, l’interrupteur de mise à jour automatique quotidienne, le rafraîchissement manuel, et un résumé du nombre de taux en cache, de leur source et de leur ancienneté. Coupez la mise à jour automatique et le cron ne continue pas discrètement à interroger : il enregistre un run ignoré avec le motif et ne touche à rien. Un job qui ment sur le fait d’être désactivé est pire que pas de job du tout.

L’historique, pour défendre un taux verrouillé

Le cache contient le taux du jour pour chaque paire. Chaque changement y est capturé dans un historique séparé, append-only, avec une date de début et une date de fin de validité, et c’est ce qui permet à quiconque de reconstituer des mois plus tard quel taux était en vigueur à un instant donné. Les enregistrements qui ont verrouillé un taux — un deal Market accepté, un settlement — gardent le taux qu’ils ont verrouillé, quoi qu’ait fait le flux ensuite. L’historique existe pour la conversation sur le taux, pas pour le changer.