Decidere se creare la tua API per i tassi di cambio o comprarne una gestita è una delle prime vere decisioni di architettura che ogni team che gestisce denaro in più di una valuta deve affrontare. Sulla carta, costruire sembra economico: la Banca Centrale Europea pubblica gratuitamente tassi di riferimento, i dati sono solo un piccolo file XML, e quanto può essere difficile parsare un feed e servirlo via HTTP? In pratica, la distanza tra un prototipo del fine settimana e un servizio di tassi pronto per la produzione è dove si nasconde la maggior parte del costo. Questa guida scompone i veri compromessi tra costruire e comprare un'API per i tassi di cambio, con numeri ingegneristici onesti, così da scegliere la strada che si adatta davvero al tuo team.
Costruire o comprare in breve
Ecco la versione breve prima di entrare nei dettagli. La scelta raramente riguarda se puoi costruire un feed di tassi — quasi ogni ingegnere competente può — ma se il costo continuo di possederlo vale la pena rispetto a pagare pochi dollari al mese.
| Fattore | Costruire (self-hosted) | Comprare (API gestita) |
|---|---|---|
| Ingegneria iniziale | Giorni o settimane | Minuti |
| Origine dei dati | Colleghi i feed BCE / banche centrali | Inclusa |
| Frequenza di aggiornamento | Quella che pianifichi | Tempo reale o quasi reale |
| Dati storici | Li costruisci e archivi | Disponibili su richiesta |
| Responsabilità di disponibilità | Tua | SLA del fornitore |
| Copertura valute | Limitata dalle tue fonti | Oltre 170 da subito |
| Costo mensile | Server + tempo di ingegneria | $0–$129 per la maggior parte |
| Manutenzione | Continua, per sempre | Nessuna |
Cosa comporta davvero "costruire il tuo"
Il motivo per cui costruire-o-comprare confonde le persone è che la demo è davvero facile e il sistema in produzione davvero non lo è. Vediamo a cosa ti impegni realmente.
Ottenere i dati grezzi
La fonte gratuita più comune è la Banca Centrale Europea, che pubblica tassi di riferimento dell'euro una volta per ogni giorno lavorativo, di solito intorno alle 16:00 CET. È la base dietro a molti feed di tassi "gratuiti", inclusi progetti open source come Frankfurter, che ora combina dati da 84 banche centrali su 201 valute.
Due cose colpiscono subito. Primo, il feed della BCE è basato su EUR e si aggiorna solo una volta per giorno lavorativo — niente aggiornamenti nel fine settimana, niente movimento intraday, niente tassi nei giorni festivi TARGET. Se i tuoi utenti effettuano transazioni di domenica o si aspettano tassi che si muovono durante la giornata, un feed giornaliero in EUR non basterà. Secondo, la BCE copre circa 30 valute. Nel momento in cui ti serve una coppia esotica, un metallo o un tasso crypto, torni a dover reperire e riconciliare più fornitori da solo.
Ecco la parte "facile" che tutti vedono — recuperare e parsare l'XML giornaliero della BCE:
import requests
import xml.etree.ElementTree as ET
URL = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
NS = {"x": "http://www.ecb.int/vocabulary/2002-08-01/eurofxref"}
resp = requests.get(URL, timeout=10)
root = ET.fromstring(resp.content)
rates = {"EUR": 1.0}
for cube in root.findall(".//x:Cube[@currency]", NS):
rates[cube.attrib["currency"]] = float(cube.attrib["rate"])
print(rates["USD"]) # EUR -> USD reference rateSono forse 15 righe. Sembra finito. Non lo è.
Parsare, archiviare e servire
Un servizio reale ha bisogno di più dell'ultima istantanea. Dovrai persistere i tassi di ogni giorno per poter rispondere a query storiche (pensa a fatture, rimborsi, contabilità e dichiarazioni fiscali che devono usare il tasso di una data specifica). Questo significa uno schema di database, un job di ingestione giornaliero, logica di retry per quando l'endpoint della BCE è lento o non disponibile, e matematica di conversione della valuta base per rispondere "USD verso JPY" quando la tua fonte fornisce solo "EUR verso tutto".
La conversione di base tramite una valuta pivot è semplice aritmetica ma facile da sbagliare sottilmente:
def convert(rates, amount, base, quote):
# rates are all relative to EUR
if base != "EUR":
amount = amount / rates[base] # to EUR
return round(amount * rates[quote], 6)
convert(rates, 100, "USD", "JPY")Poi devi esporre tutto questo tramite un'API con cache, rate limiting, autenticazione e CORS se la chiameranno i browser. Niente di tutto ciò è difficile preso singolarmente. Tutto insieme è un piccolo prodotto.
Il carico di manutenzione nascosto
Questa è la parte che il prototipo non rivela mai. Una volta che la tua azienda dipende dal feed, ti assumi una serie di obblighi ricorrenti: monitorare il job di ingestione e allertare quando fallisce in silenzio; gestire i giorni in cui il formato o l'URL della fonte cambia; colmare i buchi quando un recupero viene perso; scalare il servizio man mano che il traffico cresce; ed essere la persona allertata alle 2 di notte quando un flusso di pagamento si rompe perché i tassi sono diventati obsoleti. Un feed di tassi non è una funzionalità che consegni una volta. È un sistema che gestisci a tempo indeterminato.
Il vero costo di costruire
I team lo sottovalutano regolarmente perché la voce che conta — il tempo di ingegneria — non compare in una fattura. Una stima prudente per un feed self-hosted pronto per la produzione si presenta così:
- Costruzione iniziale: ingestione, archiviazione, conversione, livello API, autenticazione, test — di solito da una a tre settimane di lavoro ingegneristico focalizzato.
- Infrastruttura: un piccolo server o container più un database. Modesto in dollari, ma mai zero.
- Manutenzione continua: realisticamente, poche ore al mese a regime, con picchi ogni volta che una fonte si rompe o i requisiti crescono.
- Costo opportunità: ogni ora spesa a gestire un feed di tassi generico è un'ora non spesa sul prodotto per cui i tuoi clienti pagano davvero.
Applica una tariffa ingegneristica media a quelle settimane e il feed "gratis" costa silenziosamente migliaia di dollari solo nel primo trimestre — prima ancora di aver servito un solo tasso in tempo reale o una sola query storica che la tua fonte non fornisce. Confrontalo con un'API valutaria gratuita gestita che parte da zero dollari e un piano a pagamento che, per la maggior parte dei team, resta ben sotto i $129 al mese.
Cosa ottieni comprando un'API valutaria
Comprare riduce tutta quella costruzione a una richiesta HTTP. Un fornitore gestito come Finexly si occupa di origine, normalizzazione, conversione di base, archiviazione storica e disponibilità, così consumi un'interfaccia pulita e coerente. La stessa attività che sopra richiedeva uno schema e una pipeline di ingestione diventa:
curl "https://api.finexly.com/v1/latest?base=USD&symbols=EUR,GBP,JPY&apikey=YOUR_API_KEY"{
"success": true,
"base": "USD",
"timestamp": 1760000000,
"rates": {
"EUR": 0.9241,
"GBP": 0.7886,
"JPY": 156.32
}
}Qualsiasi valuta base funziona su ogni piano — nessuna restrizione solo EUR — e i dati storici sono il cambio di un parametro invece di un database che mantieni:
curl "https://api.finexly.com/v1/historical?base=USD&symbols=EUR&date=2026-01-15&apikey=YOUR_API_KEY"Ciò che compri davvero sono dati che non devi reperire, conversioni che non devi verificare e disponibilità che non devi possedere. La copertura di oltre 170 valute, risposte sotto i 50 ms e aggiornamenti in tempo reale sono di serie. L'insieme completo degli endpoint è documentato nella documentazione dell'API Finexly, e puoi confrontare i fornitori fianco a fianco con lo strumento di confronto.
Quando costruire ha senso
Costruire non è sempre la scelta sbagliata. Il self-hosting ha senso davvero quando:
- Le tue esigenze sono minime e statiche. Un tasso di riferimento giornaliero in EUR per una dashboard interna senza requisiti storici o in tempo reale è un motivo legittimo per incapsulare tu stesso il feed della BCE.
- Hai requisiti rigidi di residenza dei dati o isolamento. Se i tassi non possono lasciare la tua infrastruttura per motivi di conformità, ospitare in proprio un feed open source come Frankfurter può essere obbligatorio.
- I dati sui tassi sono il tuo prodotto principale. Se costruisci una piattaforma di trading forex in cui il motore dei tassi è il fattore distintivo, possederlo end-to-end può valere il costo.
Per tutti gli altri, costruire un feed di tassi generico significa risolvere un problema già risolto meglio.
Quando comprare ha senso
Comprare vince nel caso comune, e i segnali sono facili da riconoscere:
- Hai bisogno di qualsiasi valuta base, non solo EUR.
- Hai bisogno di movimento in tempo reale o intraday, non di un'unica istantanea giornaliera.
- Hai bisogno di tassi storici su date arbitrarie per fatturazione, contabilità o reportistica.
- Hai bisogno di ampia copertura comprese esotiche, metalli o crypto.
- Preferisci consegnare funzionalità di prodotto piuttosto che gestire infrastruttura.
- Vuoi che sia qualcun altro responsabile di disponibilità e SLA.
Se hai spuntato due o più di questi, i conti favoriscono quasi sempre comprare.
Un approccio ibrido: compra i dati, mettili in cache tu stesso
Le configurazioni di produzione più intelligenti raramente sono puro costruire o puro comprare. Comprano i dati e li mettono in cache localmente per controllare costo e latenza. Ottieni la copertura e l'affidabilità di un fornitore gestito mantenendo basso il volume di richieste — e la tua fattura. Ecco un livello di cache minimale in Node.js:
const cache = new Map();
const TTL_MS = 60 * 60 * 1000; // refresh hourly
async function getRates(base = "USD") {
const hit = cache.get(base);
if (hit && Date.now() - hit.time < TTL_MS) return hit.rates;
const url = `https://api.finexly.com/v1/latest?base=${base}&apikey=${process.env.FINEXLY_KEY}`;
const res = await fetch(url);
const data = await res.json();
cache.set(base, { rates: data.rates, time: Date.now() });
return data.rates;
}Questo schema ti dà il meglio di entrambi i mondi: non gestisci una pipeline di ingestione, ma non fai nemmeno una chiamata di rete a ogni visualizzazione di pagina. Per schemi più approfonditi, vedi la nostra guida sulle migliori pratiche di cache e gestione degli errori. Man mano che il volume cresce, i piani tariffari scalano con te invece di forzare una ricostruzione.
Una rapida checklist per decidere
Rispondi onestamente a queste domande:
- Mi serve qualcosa oltre a un'istantanea giornaliera in EUR? Se sì, propendi per comprare.
- Mi serviranno tassi storici per date specifiche? Se sì, propendi per comprare.
- I dati sui tassi sono il mio prodotto principale o una funzionalità di supporto? Se di supporto, propendi per comprare.
- Ho un motivo di conformità per cui i dati non possono lasciare la mia infrastruttura? Se sì, propendi per costruire (self-hosting).
- Il tempo del team è meglio investito sul prodotto? Quasi sempre sì — propendi per comprare.
Per la stragrande maggioranza di costruttori fintech, piattaforme SaaS e team di e-commerce, la risposta punta nella stessa direzione: compra il generico, costruisci il fattore distintivo.
Domande frequenti
È più economico costruire la mia API per i tassi di cambio? Solo se le tue esigenze sono banali e non crescono mai. L'origine dei dati può essere gratuita tramite la BCE, ma il tempo di ingegneria per costruire e mantenere un feed di produzione — ingestione, archiviazione, conversione, disponibilità, monitoraggio — di solito costa di più nel primo trimestre rispetto ad anni di abbonamento a un'API gestita.
Posso usare direttamente il feed gratuito della BCE? Puoi, con due grandi avvertenze: è basato su EUR e si aggiorna solo una volta per giorno lavorativo, senza tassi del fine settimana o intraday. Per dashboard interne va bene; per qualsiasi cosa rivolta all'utente o transazionale, di solito no.
Qual è la differenza tra Frankfurter e un'API a pagamento come Finexly? Frankfurter è un eccellente feed gratuito e open source costruito su tassi di riferimento delle banche centrali, senza chiave API né quote, ideale per usi a basso rischio o self-hosted. Un'API a pagamento come Finexly aggiunge la conversione verso qualsiasi base, aggiornamenti in tempo reale, oltre 170 valute, disponibilità/SLA garantiti e supporto — ciò che ti serve quando il denaro dipende dai tassi.
Posso combinare entrambi gli approcci? Sì, e la maggior parte dei team maturi lo fa. Compra i dati da un'API gestita per copertura e affidabilità, poi mettili in cache localmente con un TTL ragionevole per mantenere bassa la latenza e il volume di richieste — e il costo.
Come migro da un feed costruito in proprio a un'API gestita? Sostituisci la fonte dati della tua funzione interna dei tassi con una singola chiamata API, mantieni il tuo livello di cache esistente e colma eventuali esigenze storiche tramite l'endpoint storico del fornitore. Di solito sono poche ore di lavoro, non una riscrittura.
Pronto a saltare la costruzione e consegnare invece la funzionalità? Ottieni la tua chiave API Finexly gratuita — senza carta di credito. Inizia con 1.000 richieste gratuite al mese su oltre 170 valute, e fai l'upgrade solo quando il tuo traffico cresce davvero.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →