Un API gateway è la porta d’ingresso gestita alle API: un unico punto di accesso che instrada, autentica e applica il rate limiting a ogni richiesta. L’idea è la centralizzazione: il lavoro trasversale di cui ogni endpoint ha bisogno (chi è chi, con che frequenza può chiamare, dove va questa richiesta, che cosa è successo) esce da N servizi e si concentra in un unico livello di policy che i client non possono scavalcare.
Punti chiave
| Domanda | Risposta |
|---|---|
| Che cos’è | Un unico punto d’ingresso: instradare, autenticare, limitare, trasformare, osservare |
| vs. load balancer | Il LB sceglie un’istanza; il gateway prende decisioni di policy a livello di API |
| vs. reverse proxy | Un gateway lo è – con in più un cervello di policy per le API |
| vs. service mesh | Gateway = nord-sud (client in ingresso); mesh = est-ovest (da servizio a servizio) |
| La domanda onesta | Se serva davvero – molti sistemi non ne hanno ancora bisogno |
Che cosa fa la porta d’ingresso
La lista dei compiti di un gateway, sotto forma di configurazione invece di N copie di middleware – una tipica route dichiarativa:
# route della gateway: un ingresso, policy allegate
route: /orders/**
service: orders-api:8080 # routing – la topologia resta privata
auth: bearer-jwt # autenticazione alla porta
rate_limit: 100/min per key # budget prima dei backend
transform:
strip_headers: [X-Internal-*] # tradurre tra l'edge e l'interno
timeout: 5s
observe: log + trace + metrics # un unico posto da cui osservare tutto
Dal lato del client, un gateway gestito scompare dentro l’SDK – una sola chiamata, con i controlli della porta applicati prima che venga eseguita una riga di codice applicativo:
// JavaScript / Node.js — Back4app JS SDK
// One managed entry point: auth, rate limits, and routing applied per call
const receipt = await Parse.Cloud.run('placeOrder', { cartId: 'crt_812' });
// The platform's gateway verified the session, applied limits,
// and routed to the function — none of it in your code.
console.log(`Order ${receipt.orderId} confirmed`); // Flutter / Dart — Back4app Flutter SDK
// One managed entry point: auth, rate limits, and routing applied per call
final function = ParseCloudFunction('placeOrder');
final response = await function.execute(parameters: {'cartId': 'crt_812'});
if (response.success) {
print('Order ${response.result['orderId']} confirmed');
} // iOS / Swift — Back4app Swift SDK
// One managed entry point: auth, rate limits, and routing applied per call
ParseCloud.callFunction("placeOrder",
parameters: ["cartId": "crt_812"]) { result in
if case .success(let receipt) = result {
print("Order confirmed: \(receipt)")
}
} // Android / Kotlin — Back4app Android SDK
// One managed entry point: auth, rate limits, and routing applied per call
val params = hashMapOf("cartId" to "crt_812")
ParseCloud.callFunctionInBackground<Map<String, Any>>("placeOrder", params) { receipt, e ->
if (e == null) Log.d("Orders", "Order ${receipt["orderId"]} confirmed")
} I quattro sosia, messi in chiaro
| Reverse proxy | Load balancer | API gateway | Service mesh | |
|---|---|---|---|---|
| Domanda a cui risponde | ”Inoltra questo verso l’interno" | "Quale istanza?" | "Quale servizio, è consentito, a che ritmo?" | "Come dialogano i servizi in sicurezza?” |
| Traffico | Nord-sud | Nord-sud | Nord-sud | Est-ovest |
| Base della decisione | Host/path | Salute + algoritmo | Policy di API: auth, limiti, forma | Identità del servizio |
| Livello tipico | L7 di base | L4/L7 | L7, consapevole delle API | Sidecar in ogni punto |
| Relazione | Classe madre del gateway | Di norma davanti al gateway | – | Convive dietro di esso |
La descrizione canonica del pattern aggiunge la variante che vale la pena conoscere: il Backend-for-Frontend – un gateway leggero per tipo di client, ciascuno a modellare le risposte per il proprio – che scambia più unità da fare il deployment con la fine delle API taglia unica che non stanno bene a nessuno.
Gli svantaggi, detti chiaramente
Il gateway centralizza il potere, e la centralizzazione presenta il conto in quattro modi. Single point of failure: tutto gli passa attraverso – va fatto girare in cluster dietro un load balancer, oppure si accetta che il suo disservizio sia il disservizio. Il nuovo collo di bottiglia: ogni team di prodotto deposita ora le proprie modifiche di configurazione su un unico componente condiviso; governance e strumenti self-service fanno parte dell’adozione, non sono accessori. Il monolite resuscitato: la logica di aggregazione che si accumula nel gateway ricostruisce in silenzio l’applicazione centralizzata che si era appena scomposta – conviene tenerlo ricco di policy e povero di logica. La proliferazione della configurazione: centinaia di route con policy per singola route sono una codebase; va riletta come tale. Nessuno di questi punti è un argomento contro i gateway; tutti sono argomenti contro i gateway adottati con leggerezza.
Casi d’uso tipici
- Porta d’ingresso dei microservizi – la storia delle origini: molti servizi, un’unica API coerente, una topologia libera di evolvere dietro di essa.
- Prodotti multi-client – web, mobile e partner con auth, forme e limiti diversi – il terreno di casa del BFF.
- Monetizzazione delle API – chiavi, piani, quote e misurazione dell’uso imposti in un unico punto.
- Migrazioni – lo strangler pattern: il gateway instrada i path vecchi verso il sistema legacy e quelli nuovi verso il suo sostituto, in modo invisibile.
- Policy al bordo – CORS, TLS, igiene degli header e rate limiting applicati una volta sola invece di N.
Serve davvero? Matrice decisionale
| Un gateway si guadagna il posto quando… | Conviene rinunciarvi (o rinviarlo) quando… |
|---|---|
| Molti servizi stanno dietro un’unica API | Un solo servizio serve un solo tipo di client |
| I client differiscono per auth, forma o limiti | Un reverse proxy copre già TLS e routing |
| Le policy vanno imposte in modo centralizzato | Le policy distano un import di middleware |
| La topologia cambia più in fretta dei client | La topologia è una macchina sola |
| Qualcuno presidia il gateway come un prodotto | Nessuno lo manderebbe avanti |
La risposta che nessuna pagina di confronto si assume: non ancora è un’architettura legittima. La porta si aggiunge quando dietro c’è un edificio.
Limiti e trade-off
- La disponibilità diventa quella del gateway. Va messo in cluster, sorvegliato con health check e provato nel suo guasto – la contromisura è standard e non opzionale.
- Un salto di latenza, messo onestamente in bilancio con gli andata e ritorno e il middleware duplicato che elimina; conviene misurare, senza dare per scontato né un verso né l’altro.
- L’aggregazione è un piano inclinato. Comporre le risposte è legittimo; la logica di business nel gateway è il pattern ESB con una targhetta nuova.
- Le opzioni open source portano con sé il lavoro operativo. Esistono gateway eccellenti in open source (stack basati su Envoy e simili) – ciascuno è un sistema distribuito che da quel momento va fatto girare, aggiornato e messo in sicurezza.
- I gateway gestiti scambiano controllo con silenzio. La porta gestita dalla piattaforma è la risposta giusta esattamente quando gestire un gateway sarebbe fatica senza valore differenziante.
Il gateway su Back4app
Back4app è una piattaforma open-source di Backend as a Service (BaaS) che combina database gestito, API REST e GraphQL generate automaticamente, autenticazione, archiviazione di file e funzioni serverless con Cloud Code. Il livello gateway arriva con la piattaforma: ogni richiesta – REST, GraphQL, SDK o chiamata a Cloud Code, come nei tab di codice qui sopra – entra da un edge gestito che autentica sessioni e chiavi, applica il rate limiting per singola app e instrada verso le API generate o verso le funzioni scritte a mano, mentre la piattaforma si occupa del clustering e della scalabilità che rendono sicura una porta d’ingresso. La matrice decisionale si semplifica: le garanzie di un gateway ci sono dal primo giorno, senza mai dover presidiare la porta.
Domande frequenti
Che cos'è un API gateway e come funziona?
Un unico punto d'ingresso posto davanti ai servizi di backend. Ogni richiesta arriva al gateway, che autentica il chiamante, applica il rate limiting, instrada verso il servizio giusto, all'occorrenza trasforma o aggrega le risposte e registra i dati di osservabilità – poi restituisce il risultato. I client vedono un'unica API coerente; la topologia dietro resta privata e modificabile.
Qual è la differenza tra un API gateway e un load balancer?
Livello e intento. Un load balancer distribuisce il traffico su copie identiche di un servizio per capacità e disponibilità – la sua domanda è "quale istanza?". Un gateway prende decisioni consapevoli delle API – "quale servizio, questo chiamante è autorizzato, a che ritmo, con quale trasformazione?". I due sono complementari: la disposizione classica mette un load balancer davanti alle istanze del gateway, e i servizi dietro entrambi.
Un API gateway è solo un reverse proxy?
È un reverse proxy specializzato. Ogni gateway è un reverse proxy – termina le richieste dei client e le inoltra verso l'interno – ma con un cervello di policy a forma di API: autenticazione, limiti per chiave, trasformazione delle richieste, aggregazione e osservabilità a livello di API. Se servono solo inoltro e TLS, un reverse proxy semplice basta; il gateway si guadagna il posto quando entrano in gioco le policy.
Qual è la differenza tra un API gateway e un service mesh?
La direzione del traffico. Il gateway governa il traffico nord-sud – i client che entrano nel sistema. Un service mesh governa il traffico est-ovest – i servizi che si parlano all'interno, tramite sidecar che gestiscono mTLS, ritentativi e routing. I sistemi grandi usano entrambi; quelli piccoli di norma non hanno bisogno né del mesh né, a volte, del gateway.
Che cos'è il pattern Backend-for-Frontend (BFF)?
Una variazione del gateway: invece di un unico gateway che serve ogni client, ogni tipo di client – web, mobile, partner – riceve il proprio gateway leggero, che modella le risposte secondo le sue esigenze. Risolve il tiro alla corda in cui un'unica API generica serve male tutti, al prezzo di più unità da mantenere in esecuzione. Il BFF è il pattern del gateway che ammette quanto i client siano diversi tra loro.
Un API gateway è un single point of failure?
Dal punto di vista architetturale sì – tutto gli passa attraverso – ed è la ragione per cui in produzione i gateway girano come flotte in cluster, scalate orizzontalmente dietro un load balancer, con health check e failover. La contromisura è standard; la colpa sta nel far girare la porta di tutto come istanza singola perché in staging funzionava bene.
Un API gateway aggiunge latenza?
Un salto, di norma pochi millisecondi a una cifra – e spesso un guadagno netto: l'aggregazione riduce a uno diversi andata e ritorno del client, la cache risponde alle ripetizioni al bordo e il riuso delle connessioni verso i backend è più rapido delle connessioni a freddo dei client. Il conto onesto confronta quel salto con gli andata e ritorno e con il codice di policy duplicato che elimina.
Quando NON serve un API gateway?
Più spesso di quanto dicano i fornitori: un servizio singolo con un solo tipo di client, un'app renderizzata lato server che chiama il proprio backend, API interne dietro una VPN, o in qualunque punto in cui un reverse proxy già presente copra TLS e routing. Un gateway si guadagna il proprio costo operativo quando ci sono molti servizi, molti client o policy vere da centralizzare – non prima.