通貨換算 API: REST を介したリアルタイム為替レート
2 つの REST エンドポイントを使用して、170 以上の通貨間で変換し、ライブ為替レートを取得します。 無料利用枠、アカウントは不要、JSON 応答は 50 ミリ秒未満です。
あなたの e コマース ストアは 30 か国の顧客に販売しています。 購入者のサイトに価格を表示します 現地通貨。 つまり、リアルタイムの為替レートが必要であり、それが無料である必要があります。 開発中および製造中は安価です。
ほとんどの外国為替 API はリクエストごとに料金を請求し、OAuth フローを必要とするか、2000 年代初頭から XML を返します。 Botoi 通貨 API は、JSON を返し、170 以上の通貨をサポートする 2 つの POST エンドポイントを提供します。 無料枠で匿名で作業できます。 開始するために API キーは必要ありません。
任意の 2 つの通貨間で変換する
の /v1/currency/convert エンドポイントはソース通貨、ターゲット通貨、および
金額。 変換結果と使用された為替レートを返します。
curl -X POST https://api.botoi.com/v1/currency/convert \\
-H "Content-Type: application/json" \\
-d '{"from": "USD", "to": "EUR", "amount": 99.99}'
応答:
{
"success": true,
"data": {
"from": "USD",
"to": "EUR",
"amount": 99.99,
"result": 91.79,
"rate": 0.9180
}
}
の rate フィールドは生の為替レートです。 の result フィールドは
換算金額、小数点第2位を四捨五入。 両方取得できるのでレートを表示できます
ユーザーに伝えるか、独自のコードで計算を検証してください。
すべての為替レートを一度に取得する
複数の通貨のレートが必要な場合は、電話してください。 /v1/currency/convert のために
各ペアは無駄です。 の /v1/currency/rates エンドポイントは利用可能なものをすべて返します
単一の応答で特定の基本通貨のレートを返します。
curl -X POST https://api.botoi.com/v1/currency/rates \\
-H "Content-Type: application/json" \\
-d '{"base": "USD"}'
応答 (9 通貨に切り捨て):
{
"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
}
}
}
1 つのリクエストで 170 以上のレート。 この応答を 1 時間キャッシュすると、任意の金額に変換できます 追加の API 呼び出しを行わずにローカルで実行できます。 これはチェックアウトフローで採用されるアプローチです 一度に複数の通貨が必要な価格設定ページ。
オンザフライで変換する価格表示コンポーネント
ユーザーがドロップダウンから通貨を選択する価格設定ページ。 この Preact コンポーネントは 選択が変更され、結果が表示されるときの変換エンドポイント。
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>
);
}
このコンポーネントのデフォルトは USD であり、ユーザーが別のドルを選択した場合にのみ API を呼び出します。 通貨。 運用環境では、これをキャッシュ層 (以下で説明) にラップして、スイッチバックして、 通貨間で API 呼び出しを繰り返すことはありません。
複数通貨チェックアウト用の Node.js ミドルウェア
電子商取引チェックアウトでは、カート全体を基本通貨から購入者の通貨に変換する必要があります 現地通貨。 このミドルウェアはレートを 1 回フェッチし、1 時間キャッシュして変換します。 追加の API 呼び出しを行わずにすべての項目を実行できます。
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);
の convertAmount 関数は 2 つのシナリオを処理します: 直接変換
ソースは基本通貨と一致し、一致しない場合はクロスレート変換が行われます。 の
メモリ内キャッシュとは、API がチェックアウトごとに 1 回ではなく、1 時間に 1 回呼び出されることを意味します。
トラフィックの多いストアの場合は、キャッシュを Redis またはエッジ KV ストアに移動して、すべてのサーバーが インスタンスは同じキャッシュされたレートを共有します。
為替レートをキャッシュして API 呼び出しを削減する
為替レートは秒単位で変わりません。 ほとんどのアプリケーションでは、キャッシュ速度は 1 ~ 4 時間です 十分です。 このパターンは、TTL ベースの有効期限を持つメモリ内マップを使用し、キャッシュをウォームします。 最も一般的な通貨ペアの起動時に。
const RATES_CACHE = new Map();
const CACHE_TTL_MS = 4 * 60 * 60 * 1000; // 4 hours
async function getCachedRate(from, to) {
const key = \`\\\${from}:\\\${to}\
の warmCache 関数は起動時に実行され、最も一般的な 5 つをプリフェッチします
ペア。 その後、TTL の有効期限が切れると、各ペアが独自のスケジュールで更新されます。 あなたは滞在します
たとえ数十の通貨ペアであっても、無料利用枠の 1 日あたり 100 リクエストの制限内に十分収まります。
キャッシュTTLの選択
- 1時間: 料金を最新の状態に保ちたいチェックアウト フローに適しています ユーザーセッション中。
- 4時間: 価格設定ページ、ダッシュボード、レポート ツールに適しています。 料金は営業日ごとに 1 回更新されるため、4 時間のキャッシュにより同じ日内の変更がキャプチャされます。
- 24時間: 分析、請求書発行、財務レポートには最適です。 昨日のレートは許容範囲内です。
重要なポイント
-
/v1/currency/convert170 以上の任意の 2 つの金額の間で特定の金額を変換します サポートされている通貨。 変換結果と使用レートを返します。 -
/v1/currency/rates基本通貨に対して利用可能なすべての為替レートを返します 一つの返答で。 変換ごとの API 呼び出しを避けるためにローカルにキャッシュします。 -
どちらのエンドポイントも匿名で 1 分あたり 5 リクエスト、1 日あたり 100 リクエストで動作します。 渡す
X-Api-Keyより高い制限のヘッダー。 - 精度要件に応じて、1 ~ 4 時間のキャッシュ速度。 為替レート 営業日ごとに 1 回更新します。
- APIはCloudflareのエッジネットワーク上で実行されます。 応答時間は 20 ~ 50 ミリ秒です。 と組み合わせてください ローカル キャッシュと通貨換算により、ユーザー向けのリクエストに待ち時間が追加されません。
FAQ
- How many currencies does the API support?
- API は 170 以上の法定通貨および一般的なデジタル通貨をサポートしています。 サポートされている基本通貨を使用して /v1/currency/rates に POST を送信し、応答で使用可能なターゲットの完全なリストを取得します。
- 通貨換算 API は無料ですか?
- 匿名アクセスは、IP ベースのレート制限により、1 分あたり 5 リクエスト、1 日あたり 100 リクエストまで利用できます。 API キーやアカウントは必要ありません。 より高いスループットを実現するには、有料プランは月額 9 ドルから始まります。
- 為替レートはどのくらいの頻度で更新されますか?
- 金利は欧州中央銀行およびその他の公的金融データプロバイダーから取得されています。 これらは営業日ごとに 1 回、通常は中央ヨーロッパ時間の 16:00 頃に更新されます。 ほとんどの e-コマースおよび SaaS の料金設定のユースケースでは、日額料金で十分です。
- Can I convert between two non-USD currencies?
- はい。 /v1/currency/convert エンドポイントは、サポートされている通貨ペアを受け入れます。 EUR から JPY、GBP から INR、またはその他の組み合わせを直接変換できます。 The API handles the cross-rate calculation.
- What is the response time?
- API はエッジの Cloudflare ワーカー上で実行されます。 通常の応答時間は、地域に応じて 20 ~ 50 ミリ秒です。 ローカルでのキャッシュ率は、繰り返し検索の場合にこれをゼロに下げます。
botoiで開発を始めよう
150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。