Scroll Top
Via Antonio Amato, 20/22 84131 Salerno (SA)

API Gateway: punto di accesso sicuro alle risorse

Api Gateway

(articolo redatto da Vito Carrozza)

Nell’epoca digitale in cui siamo immersi, la gestione delle interazioni tra sistemi software è fondamentale per garantire la scalabilità, le prestazioni e l’affidabilità delle applicazioni.

In questo contesto, gli API Gateway emergono come uno strumento essenziale per semplificare e orchestrare il flusso di traffico tra client e servizi, fornendo un’interfaccia unificata e sicura per l’accesso alle risorse.

Introduzione all’API Gateway

Si consideri un sistema di video streaming community-based. Sistemi di questo tipo sono applicazioni che, oltre all’usuale streaming di flussi video, comprendono anche altre funzionalità tra cui:

  • Servizi di front-end
  • User Profile Management
  • Channel Subscriptions
  • User comments

Volendo costruire un unico componente che permette la fruizione di tutte queste funzionalità si creerebbe un monolite troppo complesso da gestire e manutenere.
Si decide, quindi, di applicare scalabilità organizzativa [in questo articolo i dettagli su questo tipo di scalabilità] e le varie suddivisioni del team di sviluppo producono un sistema suddiviso in servizi, ognuno dei quali è preposto a eseguire uno dei compiti sopra descritti e interrogato attraverso una specifica API [per i dettagli su come progettare API in modo corretto, si rimanda alla lettura di questo articolo Rest api best practices].

Una volta suddiviso il grande agglomerato in servizi, vi è la necessità di occuparsi di particolari aspetti non necessariamente legati alla specifica funzionalità, ma che sono invece cross-funzionali e comuni a tutte le API.
Aspetti di questo tipo sono, ad esempio, l’autenticazione e il routing e, in assenza di sistemi di centralizzazione, il codice che implementa suddette funzionalità deve essere replicato su tutte le istanze che eseguono le nostre API.

Per ovviare a questo problema, è stato introdotto un nuovo blocco costituente delle architetture software denominato Api Gateway.
In termini semplici, un API Gateway è uno strato intermediario che si interpone tra i client e i servizi sottostanti, fungendo da portale unificato per l’accesso alle API. Questo componente è responsabile della gestione delle richieste, dell’autenticazione degli utenti, della limitazione del traffico, del monitoraggio delle prestazioni e di altre funzionalità, riducendo la complessità della gestione delle API distribuite.

ApiGateway_architettura
Figura 1 - Posizionamento dell'API Gateway nell'architettura

Senza l’utilizzo di un API Gateway, le applicazioni devono gestire direttamente l’accesso ai servizi sottostanti. Questo approccio può portare a diversi problemi, tra cui:

  1. Sicurezza decentralizzata: senza un punto di controllo centralizzato, diventa difficile garantire la sicurezza delle richieste di autenticazione di autorizzazione ai servizi.
  2. Complessità gestionale: la gestione diretta delle richieste API da parte delle applicazioni richiede la scrittura di codice aggiuntivo per la gestione dell’accesso, del monitoraggio e delle politiche di limitazione del traffico. Questo codice può essere anche diversificato da servizio a servizio e può anche non rispettare standard qualitativi noti.
  3. Manutenzione onerosa: l’aggiunta, la modifica o la rimozione di servizi richiede modifiche dirette nell’applicazione, aumentando la complessità e il rischio di errori.

Parametri di affidabilità

L’ API Gateway implementa uno speciale pattern chiamato API Composition. Questo pattern, insieme al pattern CQRS, rappresenta uno delle soluzioni architetturali più pulite per accedere a dati e/o funzionalità forniti dalle varie istanze di un sistema distribuito.
Esso si avvale di due componenti: un API composer e un set di servizi, i quali sono identificabili ed interrogabili tramite una specifica API.
Quando l’utente avanza una richiesta verso il sistema, l’API composer implementa una query composita all’interno della quale sono specificate le informazioni necessarie a capire quali servizi devono essere stimolati. L’API composer, quindi, eseguendo un’orchestrazione, è in grado di recuperare i dati/le funzionalità dai diversi servizi, combinando le risposte e restituendo un’unica risposta unificata al chiamante.

Il pattern API Composition
Figura 2 - Il pattern API Composition

L’utilizzo del pattern API composition fornisce un forte livello d’astrazione all’utente: più API sono nascoste dietro l’API Composer e l’utente interagisce con il sistema come se stesse richiamando un’unica API che astrae un unico servizio.
A causa di questa importante caratteristica, l’API Gateway fornisce importanti vantaggi a livello di performance, high availability e scalabilità:

  1. Scalabilità: utilizzando l’API Composition, l’API Gateway può aggregare diverse chiamate API in una singola richiesta, riducendo così il numero complessivo di chiamate effettuate ai servizi sottostanti. Questo può ridurre il carico sui server e migliorare la scalabilità del sistema, consentendo di gestire più richieste senza dover aumentare proporzionalmente le risorse di elaborazione. Inoltre, l’astrazione offerta dal pattern permette di aggiungere/rimuovere istanze all’architettura in maniera del tutto trasparente.
  2. High availability: l’API Composition può contribuire anche alla riduzione del rischio di fallimenti. Aggregando le chiamate API in una singola richiesta, l’API Gateway può implementare tecniche di failover più efficaci. Ad esempio, se un servizio sottostante diventa non disponibile, l’API Gateway può gestire la situazione in modo trasparente per il client, eventualmente instradando la richiesta verso un altro servizio alternativo o restituendo una risposta di fallback, mantenendo così l’alta disponibilità complessiva del sistema.
  3. Performance: utilizzando l’API Composition, è possibile ottimizzare le prestazioni del sistema riducendo il ritardo dovuto alle molteplici chiamate API. L’API Gateway può eseguire l’assemblaggio dei dati provenienti da più servizi sottostanti e restituire una risposta al client in un’unica operazione, riducendo così il tempo complessivo di latenza. Inoltre, l’API Gateway può implementare tecniche di caching per memorizzare le risposte composte e ridurre ulteriormente il tempo di risposta per le richieste successive.

Caratteristiche principali

Lo strumento API Gateway è stato progettato con lo scopo di centralizzare tutti quei comportamenti che sono comuni a tutte le API.
Alcune delle caratteristiche principali sono:

1. Routing: l’API Gateway instrada le richieste agli endpoint corrispondenti dei servizi sottostanti. Nello specifico, vengono supportate diverse tipologie di routing. Qui se ne riportano quelle più importanti:

    • URL rounting: instrada le richieste in base al percorso dell’URL;
    • HTTP routing: differenzia le richieste in base al metodo HTTP utilizzato;
    • Query parameters routing: utilizza i parametri di query contenuti nell’URL della richiesta per determinare quale servizio deve gestire la richiesta;
    • Load balancing routing: utilizza algoritmi di bilanciamento del carico per distribuire le richieste tra più istanze di un microservizio. Si noti che usando questa tipologia di routing si sta sfruttando l’API Gateway come se fosse un load balancer [qui un articolo sul load balancer];
    • Versioning routing: permette di gestire più versioni di un’API instradando le richieste alla versione appropriata;

2. Autenticazione e autorizzazione: gestisce l’autenticazione degli utenti e l’autorizzazione alle risorse, garantendo un accesso sicuro. Molte sono le modalità di accesso, ma le più utilizzate sono l’autenticazione tramite token (JWT o OAuth2 Access Token), l’autenticazione tramite API key e la Basic Authentication.

3. Controllo del traffico, monitoraggio e analisi: limita e gestisce il traffico alle API per evitare sovraccarichi e garantire prestazioni ottimali. Monitora le prestazioni delle API e analizza il traffico per scopi di ottimizzazione e sicurezza.

4. Versioning e gestione del ciclo di vita: supporta la gestione delle versioni delle API e facilita il controllo del ciclo di vita delle risorse.

5. Protocol translation: la maggior parte degli API Gateway in commercio accettano un solo formato di dati in ingresso (solitamente JSON). Tuttavia, i servizi sottostanti potrebbero non accettare questo formato. L’API Gateway è in grado di effettuare la traduzione di formato.

Protocol translation con API Gateway
Figura 3 - Protocol translation con API Gateway

Svantaggi

Sebbene fino a questo punto si è discusso di come l’API Gateway offra numerosi vantaggi all’ecosistema architetturale, è bene anche dedicare anche un po’ di attenzione agli svantaggi e alle problematiche che si possono incontrare quando si usa questo strumento.

1. Singolo punto di fallimento: un malfunzionamento dell’API Gateway può interrompere l’accesso a tutti i servizi. Per risolvere questo problema è possibile sfruttare diversi API Gateway coordinati da un load balancer, aggiungendo così ridondanza all’architettura.

Soluzione di ridondanza punto di fallimento
Figura 4 - Soluzione di ridondanza al singolo punto di fallimento

2. Costi: l’implementazione e la gestione di un API Gateway possono comportare costi aggiuntivi. Questi costi possono abbracciare diverse aree, dal costo di volume (alcuni provider applicano tariffe in base al volume totale di traffico gestito dall’API Gateway) al costo di un abbonamento per servizio su cloud, al costo di manutenzione dell’architettura (sia hardware che software).

3. Complessità aggiuntiva: l’aggiunta di uno strato aggiuntivo introduce complessità nell’architettura complessiva e richiede competenze specifiche per la configurazione e la gestione.

API Gateway dei Principali Provider Cloud

Amazon Web Services (AWS) API Gateway

AWS API Gateway offre un servizio completamente gestito per la creazione, la pubblicazione, la manutenzione e il monitoraggio di API scalabili. Le sue caratteristiche includono:

  • Integrazione con servizi AWS: integra facilmente con altri servizi AWS come Lambda, EC2, e altri.
  • Controllo fine-granularità: fornisce un controllo dettagliato su autenticazione, autorizzazione e controllo del traffico.
  • Integrazione con AWS WAF (Web Application Firewall): per una protezione aggiuntiva dalle vulnerabilità Web.

Microsoft Azure API Management

Azure API Management consente di creare, pubblicare, gestire e proteggere le API in modo scalabile. Le sue caratteristiche includono:

  • Portale Self-Service: per semplificare la gestione e la distribuzione delle API da parte degli sviluppatori.
  • Gestione del ciclo di vita: supporta la gestione completa del ciclo di vita delle API, dalla creazione alla dismissione.
  • Advanced Analytics: fornisce dashboard e report dettagliati sul traffico e le prestazioni delle API.

Google Cloud Endpoints

Google Cloud Endpoints offre un’infrastruttura scalabile per la creazione, la gestione e la protezione delle API. Le sue caratteristiche includono:

  • Integrazione con Google Cloud Services: integra facilmente altri servizi Google Cloud come App Engine, Cloud Functions, e altri.
  • Sicurezza integrata: fornisce autenticazione e autorizzazione basate su token JWT e supporta l’integrazione con Google Identity Platform.
  • Monitoraggio avanzato: offre analisi dettagliate sulle prestazioni delle API e sul comportamento dei clienti.

Per più dettagli tecnici è possibile visionare le pagine ufficiali dei servizi qui sotto riportate:

API Gateway Open Source

Oltre alle soluzioni offerte dai principali cloud provider, esistono diverse alternative open source per implementare un API Gateway. Il più utilizzato e conosciuto sicuramente è Kong API Gateway. Di questo API Gateway esiste sia la versione enterprise che la versione free (qui la pagina ufficiale).

Tuttavia, sicuramente il suo successo è determinato da queste caratteristiche primarie:

  • architettura estendibile e modulare basata su una vasta gamma di plug-in
  • più prestante in scenari con high availability al disopra di “4-nove”
  • community sempre disponibile al cui interno sono presenti anche gli esperti di casa
  • facile configurazione, che può avvenire mediante una dashboard, CLI o API
  • di facile apprendimento
  • integrazione con altre tecnologie facilitata ed avanzata grazie sia alla sua natura generalista (Kong è pensato per integrarsi con una generica tecnologia e non con una specifica).

Conclusioni

In sintesi, l’API Gateway è lo strumento essenziale se si vuole accentrare il controllo della sicurezza e del funzionamento di navigazione di un’architettura distribuita. Sebbene i suoi benefici siano molteplici, non bisogna mai dimenticarsi che l’aggiunta di uno strato intermediario fra utente e servizi introduce comunque delle problematiche il cui effetto è ammortizzabile da una corretta gestione ed utilizzo dello strumento.

Il giusto trade-off tra vantaggi e svantaggi, in tal caso, può determinare il successo dell’architettura e portare quest’ultima ad essere moderna ed efficiente.


Se anche tu vuoi far parte del team di sviluppo Nexsoft,
dai un’occhiata alle nostre opportunità di lavoro e conosciamoci subito!

Questo sito utilizza cookies propri e si riserva di utilizzare anche cookie di terze parti per garantire la funzionalità del sito e per tenere conto delle scelte di navigazione.
Per maggiori dettagli e sapere come negare il consenso a tutti o ad alcuni cookie è possibile consultare la Cookie Policy.

USO DEI COOKIE

Se abiliti i cookie nella tabella sottostante, ci autorizzi a memorizzare i tuoi comportamenti di utilizzo sul nostro sito web. Questo ci consente di migliorare il nostro sito web e di personalizzare le pubblicità. Se non abiliti i cookie, noi utilizzeremo solo cookies di sessione per migliorare la facilità di utilizzo.

Cookie tecnicinon richiedono il consenso, perciò vengono installati automaticamente a seguito dell’accesso al Sito.

Cookie di statisticaVengono utilizzati da terze parti, anche in forma disaggregata, per la gestione di statistiche

Cookie di social networkVengono utilizzati per la condivisione di contenuti sui social network.

Cookie di profilazione pubblicitariaVengono utilizzati per erogare pubblicità basata sugli interessi manifestati attraverso la navigazione in internet.

AltriCookie di terze parti da altri servizi di terze parti che non sono cookie di statistica, social media o pubblicitari.