Zum Inhalt springen
Tutorial

Währungsumrechnungs-API: Wechselkurse in Echtzeit über REST

| 5 min read

Konvertieren Sie zwischen über 170 Währungen und rufen Sie Live-Wechselkurse mit zwei REST-Endpunkten ab. Kostenloses Kontingent, kein Konto erforderlich, JSON-Antworten in weniger als 50 ms.

Assorted world currency banknotes
Photo by Jason Leung on Unsplash

Ihr E-Commerce-Shop verkauft an Kunden in 30 Ländern. Sie zeigen die Preise im Käuferverzeichnis an lokale Währung. Das bedeutet, dass Sie Echtzeit-Wechselkurse benötigen, und diese müssen kostenlos sein während der Entwicklung und günstig in der Produktion.

Die meisten Forex-APIs berechnen eine Gebühr pro Anfrage, erfordern OAuth-Flows oder geben XML aus den frühen 2000er Jahren zurück. Die Botoi-Währungs-API bietet Ihnen zwei POST-Endpunkte, die JSON zurückgeben, über 170 Währungen unterstützen, und anonym im kostenlosen Kontingent arbeiten. Für den Einstieg ist kein API-Schlüssel erforderlich.

Konvertieren Sie zwischen zwei beliebigen Währungen

Der /v1/currency/convert Der Endpunkt benötigt eine Quellwährung, eine Zielwährung usw Menge. Es gibt das umgerechnete Ergebnis und den verwendeten Wechselkurs zurück.

curl -X POST https://api.botoi.com/v1/currency/convert \\
  -H "Content-Type: application/json" \\
  -d '{"from": "USD", "to": "EUR", "amount": 99.99}'

Antwort:

{
  "success": true,
  "data": {
    "from": "USD",
    "to": "EUR",
    "amount": 99.99,
    "result": 91.79,
    "rate": 0.9180
  }
}

Der rate Feld ist der rohe Wechselkurs. Der result Feld ist das umgerechneter Betrag, auf zwei Dezimalstellen gerundet. Sie erhalten beides, damit Sie den Tarif anzeigen können an Benutzer oder überprüfen Sie die Mathematik in Ihrem eigenen Code.

Rufen Sie alle Wechselkurse auf einmal ab

Wenn Sie Kurse für mehrere Währungen benötigen, rufen Sie an /v1/currency/convert für Jedes Paar ist verschwenderisch. Der /v1/currency/rates Der Endpunkt gibt alle verfügbaren zurück Wechselkurs für eine bestimmte Basiswährung in einer einzigen Antwort.

curl -X POST https://api.botoi.com/v1/currency/rates \\
  -H "Content-Type: application/json" \\
  -d '{"base": "USD"}'

Antwort (gekürzt auf 9 Währungen):

{
  "success": true,
  "data": {
    "base": "USD",
    "rates": {
      "EUR": 0.9180,
      "GBP": 0.7891,
      "JPY": 149.52,
      "CAD": 1.3612,
      "AUD": 1.5340,
      "CHF": 0.8821,
      "INR": 83.4150,
      "BRL": 4.9720,
      "MXN": 17.1340
    }
  }
}

Eine Anfrage, über 170 Preise. Speichern Sie diese Antwort eine Stunde lang im Cache und Sie können einen beliebigen Betrag umrechnen lokal, ohne zusätzliche API-Aufrufe durchzuführen. Dies ist der Ansatz für den Checkout-Ablauf und Preisseiten, auf denen Sie mehrere Währungen gleichzeitig benötigen.

Preisanzeigekomponente, die im Handumdrehen konvertiert

Eine Preisseite, auf der Benutzer ihre Währung aus einem Dropdown-Menü auswählen. Diese Preact-Komponentenaufrufe den Konvertierungsendpunkt, wenn sich die Auswahl ändert, und zeigt das Ergebnis an.

import { useState, useEffect } from "preact/hooks";

const SUPPORTED_CURRENCIES = ["USD", "EUR", "GBP", "JPY", "CAD"];

function PriceDisplay({ priceUsd }) {
  const [currency, setCurrency] = useState("USD");
  const [converted, setConverted] = useState(priceUsd);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    if (currency === "USD") {
      setConverted(priceUsd);
      return;
    }

    setLoading(true);
    fetch("https://api.botoi.com/v1/currency/convert", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        from: "USD",
        to: currency,
        amount: priceUsd,
      }),
    })
      .then((res) => res.json())
      .then(({ data }) => {
        setConverted(data.result);
        setLoading(false);
      });
  }, [currency, priceUsd]);

  return (
    <div>
      <select
        value={currency}
        onChange={(e) => setCurrency(e.target.value)}
      >
        {SUPPORTED_CURRENCIES.map((c) => (
          <option key={c} value={c}>{c}</option>
        ))}
      </select>
      <span>
        {loading ? "..." : \`\\\${converted.toFixed(2)} \\\${currency}\`}
      </span>
    </div>
  );
}

Die Komponente ist standardmäßig auf USD eingestellt und ruft die API nur auf, wenn der Benutzer eine andere auswählt Währung. Wickeln Sie dies für die Produktion in eine Cache-Schicht (unten abgedeckt), also wechseln Sie zurück und Der Wechsel zwischen Währungen wiederholt keine API-Aufrufe.

Node.js-Middleware für den Checkout in mehreren Währungen

Beim Bezahlen im E-Commerce muss der gesamte Warenkorb von Ihrer Basiswährung in die Währung des Käufers umgerechnet werden lokale Währung. Diese Middleware ruft die Kurse einmal ab, speichert sie eine Stunde lang im Cache und konvertiert sie jede Werbebuchung ohne zusätzliche API-Aufrufe.

import express from "express";

const app = express();
app.use(express.json());

// Cache rates in memory with a 1-hour TTL
let ratesCache = null;
let cacheTimestamp = 0;
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour

async function getRates(base) {
  const now = Date.now();

  if (ratesCache && ratesCache.base === base && now - cacheTimestamp < CACHE_TTL_MS) {
    return ratesCache;
  }

  const res = await fetch("https://api.botoi.com/v1/currency/rates", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-Api-Key": process.env.BOTOI_API_KEY,
    },
    body: JSON.stringify({ base }),
  });
  const { data } = await res.json();

  ratesCache = data;
  cacheTimestamp = now;
  return data;
}

function convertAmount(rates, from, to, amount) {
  if (from === to) return amount;

  // If "from" is the base currency, multiply by the target rate
  if (from === rates.base) {
    return Math.round(amount * rates.rates[to] * 100) / 100;
  }

  // Otherwise, convert to base first, then to target
  const inBase = amount / rates.rates[from];
  return Math.round(inBase * rates.rates[to] * 100) / 100;
}

app.post("/checkout", async (req, res) => {
  const { items, currency } = req.body;

  // Calculate total in USD (your base currency)
  const totalUsd = items.reduce((sum, item) => sum + item.price * item.qty, 0);

  // Convert to the buyer's currency
  const rates = await getRates("USD");
  const totalLocal = convertAmount(rates, "USD", currency, totalUsd);

  res.json({
    currency,
    total: totalLocal,
    rate: rates.rates[currency],
    items: items.map((item) => ({
      ...item,
      localPrice: convertAmount(rates, "USD", currency, item.price),
    })),
  });
});

app.listen(3000);

Der convertAmount Die Funktion behandelt zwei Szenarien: direkte Konvertierung, wenn Die Quelle stimmt mit der Basiswährung überein, und wenn dies nicht der Fall ist, wird eine kursübergreifende Umrechnung durchgeführt. Die In-Memory-Cache bedeutet, dass die API einmal pro Stunde und nicht einmal pro Checkout aufgerufen wird.

Verschieben Sie bei stark frequentierten Stores den Cache auf Redis oder Ihren Edge-KV-Store, also auf alle Server Instanzen haben dieselben zwischengespeicherten Raten.

Wechselkurse zwischenspeichern, um API-Aufrufe zu reduzieren

Wechselkurse ändern sich nicht im Sekundentakt. Bei den meisten Anwendungen betragen die Caching-Raten 1–4 Stunden ist genug. Dieses Muster verwendet eine In-Memory-Map mit TTL-basiertem Ablauf und erwärmt den Cache beim Start für Ihre gängigsten Währungspaare.

const RATES_CACHE = new Map();
const CACHE_TTL_MS = 4 * 60 * 60 * 1000; // 4 hours

async function getCachedRate(from, to) {
  const key = \`\\\${from}:\\\${to}\

Der warmCache Die Funktion wird beim Start ausgeführt und ruft Ihre fünf häufigsten vorab ab Paare. Danach wird jedes Paar nach Ablauf der TTL nach seinem eigenen Zeitplan aktualisiert. Du bleibst deutlich innerhalb des Limits von 100 Anfragen pro Tag des kostenlosen Kontingents, selbst bei Dutzenden von Währungspaaren.

Auswählen einer Cache-TTL

  • 1 Stunde: Gut für Checkout-Abläufe, bei denen die Preise aktuell bleiben sollen während einer Benutzersitzung.
  • 4 Stunden: Gut für Preisseiten, Dashboards und Berichtstools. Die Preise werden einmal pro Werktag aktualisiert, sodass Änderungen am selben Tag durch das 4-Stunden-Caching erfasst werden.
  • 24 Stunden: Gut geeignet für Analysen, Rechnungen und Finanzberichte Der Kurs von gestern ist akzeptabel.

Wichtige Punkte

  • /v1/currency/convert wandelt einen bestimmten Betrag zwischen zwei beliebigen Werten von 170+ um unterstützte Währungen. Gibt das konvertierte Ergebnis und die verwendete Rate zurück.
  • /v1/currency/rates gibt alle verfügbaren Wechselkurse für eine Basiswährung zurück in einer Antwort. Zwischenspeichern Sie es lokal, um API-Aufrufe pro Konvertierung zu vermeiden.
  • Beide Endpunkte arbeiten anonym mit 5 Anfragen pro Minute und 100 pro Tag. Übergeben Sie eine X-Api-Key Überschrift für höhere Grenzwerte.
  • Cache-Raten für 1–4 Stunden, abhängig von Ihren Genauigkeitsanforderungen. Wechselkurse Aktualisierung einmal pro Werktag.
  • Die API läuft im Edge-Netzwerk von Cloudflare. Die Reaktionszeiten betragen 20–50 ms. Kombiniere es mit Lokales Caching und Ihre Währungsumrechnung sorgen für null Latenz bei benutzerbezogenen Anfragen.

FAQ

Wie viele Währungen unterstützt die API?
Die API unterstützt über 170 Fiat- und gängige digitale Währungen. Senden Sie einen POST an /v1/currency/rates mit einer beliebigen unterstützten Basiswährung, um die vollständige Liste der verfügbaren Ziele in der Antwort zu erhalten.
Ist die Währungsumrechnungs-API kostenlos?
Der anonyme Zugriff ist mit 5 Anfragen pro Minute und 100 Anfragen pro Tag mit IP-basierter Ratenbegrenzung möglich. Kein API-Schlüssel oder Konto erforderlich. Bezahlte Pläne beginnen bei 9 $/Monat für einen höheren Durchsatz.
Wie oft werden Wechselkurse aktualisiert?
Die Zinssätze stammen von der Europäischen Zentralbank und anderen öffentlichen Finanzdatenanbietern. Sie werden einmal pro Werktag aktualisiert, normalerweise gegen 16:00 Uhr MEZ. Für die meisten E-Commerce- und SaaS-Preisanwendungsfälle sind Tagessätze ausreichend.
Kann ich zwischen zwei Nicht-USD-Währungen umrechnen?
Ja. Der Endpunkt /v1/currency/convert akzeptiert jedes unterstützte Währungspaar. Sie können EUR in JPY, GBP in INR oder jede andere Kombination direkt umrechnen. Die API übernimmt die Cross-Rate-Berechnung.
Wie lange ist die Reaktionszeit?
Die API läuft auf Cloudflare Workers am Edge. Typische Reaktionszeiten betragen je nach Region 20–50 ms. Durch lokale Caching-Raten wird dies bei wiederholten Suchvorgängen auf Null reduziert.

Starte mit botoi zu entwickeln

150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.