Wissensbasis/Finanzen und Settlements/Wechselkurse: ein API-Call pro Tag und ein Fallback, der keinen Key braucht
06Finanzen und Settlements2 Min. Lesezeit

Wechselkurse: ein API-Call pro Tag und ein Fallback, der keinen Key braucht

Der tägliche Aktualisierungsjob, die zwei Quellen dahinter, und die Historie, die immer noch sagen kann, welcher Kurs an einem Dienstag im März galt.

Wechselkurse sind die Sorte Infrastruktur, an die niemand denkt, bis ein Settlement in Dollar steht und jemand fragt, woher 1.0847 kommt. Die Antwort der Plattform ist bewusst klein: ein Job, ein Cache, eine Historientabelle und eine Admin-Seite mit drei Bedienelementen.

Ein Job, einmal am Tag

Ein Cron ruft /api/cron/refresh-rates um 07:00 UTC auf — 08:00 mitteleuropäischer Zeit. Er holt die aktuellen EUR-basierten Kurse, behält nur die Paare, deren Währung im Katalog steht, und schreibt sie in den Kurs-Cache: eine Zeile pro Währungspaar, bei jeder Aktualisierung ersetzt. Umrechnungen zwischen zwei Fremdwährungen werden zur Laufzeit aus diesen EUR-Paaren berechnet, und genau deshalb deckt ein einziger API-Call pro Tag jeden Tenant der Plattform ab. Für die Morgen, an denen Warten bis morgen keine Option ist, gibt es einen Button Jetzt aktualisieren.

Zwei Quellen, eine davon kostenlos

Die primäre Quelle ist ExchangeRate-API: 161 Währungen, tägliche Updates und ein API-Key, den das Plattformteam einmal hinterlegt. Ohne Key — oder wenn der primäre Call leer zurückkommt — fällt der Job auf Frankfurter zurück, das die Referenzkurse der Europäischen Zentralbank liefert: 31 Währungen, täglich um 16:00 MEZ veröffentlicht, kein Key nötig. Der Fallback läuft automatisch, und jede Aktualisierung hält fest, welche Quelle die Zahlen tatsächlich geliefert hat, sodass ein dünner Kurstag sich selbst erklärt, statt wie ein Bug auszusehen.

Der Schalter, und was passiert, wenn er aus ist

/admin/exchange-rates gehört dem Plattformteam; alle anderen bekommen die Seite mit dem Zugriffshinweis. Sie enthält den API-Key, den Schalter für die automatische tägliche Aktualisierung, die manuelle Aktualisierung und eine Zusammenfassung, wie viele Kurse aus welcher Quelle im Cache liegen und wie lange das her ist. Schalten Sie die automatische Aktualisierung ab, holt der Cron nicht klammheimlich weiter: Er erfasst einen übersprungenen Lauf mit Grund und fasst nichts an. Ein Job, der lügt, wenn er abgeschaltet ist, ist schlimmer als gar kein Job.

Historie, damit ein festgeschriebener Kurs verteidigt werden kann

Der Cache hält den heutigen Kurs für jedes Paar. Jede Änderung daran wird in einer getrennten, nur anfügbaren Historie mit Gültig-ab und Gültig-bis festgehalten, und genau das lässt Monate später jeden rekonstruieren, welcher Kurs zu einem bestimmten Moment galt. Records, die einen Kurs festgeschrieben haben — ein akzeptierter Market-Deal, ein Settlement —, behalten den Kurs, den sie festgeschrieben haben, egal was der Feed danach getan hat. Die Historie existiert für das Gespräch über den Kurs, nicht dafür, ihn zu ändern.