Un API gateway è un’applicazione web complessa che si colloca ad un livello intermedio tra i microservizi funzionali, sviluppati dai singoli team DevOps, e i front-end delle applicazioni utilizzate dagli utenti sui loro rispettivi device. Ma andiamo con ordine.
Il passaggio dalle tradizionali architetture monolitiche alla più moderna architettura a microservizi ha del tutto rivoluzionato non soltanto il modo in cui si sviluppano i singoli moduli funzionali, ma anche il modo di connetterli e renderli disponibili alle interfacce applicative.
A tal proposito sono nate le API (Application Programming Interface), applicazioni studiate nello specifico per consentire alle piattaforme software e alle singole applicazioni di interagire e comunicare in maniera corretta tra loro.
Le API semplificano enormemente la vita ai team DevOps, consentendo loro di lavorare in maniera agile sullo sviluppo dei singoli microservizi senza doversi preoccupare all’origine dell’architettura necessaria per rendere funzionale l’applicazione finale. Tale ruolo di mediazione viene infatti svolto proprio dalle API.
In sede di premessa è infatti assolutamente opportuno ricordare come, rispetto alla tradizione monolitica, l’architettura a microservizi consente suddividere l’applicazione in vari moduli funzionali, da loro indipendenti e disaccoppiati.
Questo approccio architetturale consente pertanto ai team di sviluppare secondo i principi delle metodologie DevOps e Agile, abilitando la possibilità di programmare i singoli microservizi con tecnologie e linguaggi differenti, in maniera del tutto svincolata rispetto a quanto avviene nei flussi di lavoro che interessano gli altri moduli dell’applicazione principale.
Questa moderna logica di concezione del software, alla base delle applicazioni cloud native, ha dato il via a quella che viene definita la API economy, in cui gli sviluppatori possono integrare varie tipologie di servizi per creare applicazioni basate sui singoli microservizi funzionali.
Nel caso delle applicazioni web, il caso più ricorrente è costituito dai servizi e-commerce integrati nei siti aziendali e nei marketplace, in cui se si rendesse ad esempio necessario aggiornare il catalogo prodotti, si procederebbe alla modifica del solo microservizio che lo implementa, senza dover aggiornare l’intera applicazione, come sarebbe avvenuto nel caso della tradizionale architettura monolitica.
L’architettura a microservizi è alla base delle applicazioni cloud native, disponibili in modalità Software-as-a-Service (SaaS), in cui l’utente finale non è soggetto a continue procedure di installazione ed aggiornamento in locale, ma può puntualmente accedere alla versione più attuale accedendovi da remoto attraverso un semplice browser web.
Tale modello di distribuzione, molto più agile rispetto alla struttura monolitica, risulta del tutto funzionale alle nuove prassi di lavoro da remoto e prevede che il provider del software rilasci automaticamente gli aggiornamenti in maniera del tutto trasparente all’utente finale, eliminando quasi del tutto l’esigenza di downtime per le procedure di manutenzione.
Cos’è una API gateway
Come anticipato, un API gateway è un’applicazione web complessa che si colloca ad un livello intermedio tra i microservizi funzionali, sviluppati dai singoli team DevOps, e i front-end delle applicazioni utilizzate dagli utenti sui loro rispettivi device.
Occorre infatti considerare che ogni microservizio è concepito per un set di specifici endpoint, generando una complessità nella comunicazione tra il microservizio stesso e il client. Il gateway serve nello specifico a risolvere questa complessità e renderla anzi efficiente e funzionale in tutti gli ambienti personalizzati dove viene eseguita l’applicazione.
Quanto appena descritto potrebbe apparire banale, ma non lo è affatto se si considera la natura pratica del problema, in cui le moderne piattaforme software sono costituite da grandi numeriche di microservizi, che vanno gestiti su un numero anch’esso elevato di endpoint.
Come funziona lo sviluppo cloud native
Gli API gateway si contestualizzano nello sviluppo dei microservizi, in cui le API costituiscono l’interfaccia necessaria per rendere disponibili le singole funzioni dell’applicazione agli endpoint che la eseguono.
Negli ambienti di sviluppo cloud native, è necessario aggiornare rapidamente i microservizi che corrispondono alle singole funzioni che compongono l’applicazione finale. Questo processo genera una frenesia che va oltre il contesto lineare del software monolitico e richiede l’esigenza di un’interfaccia costituita appositamente per tale scopo. Le API, insieme ai container e all’integrazione distribuita, costituiscono gli elementi principali su cui si fonda lo sviluppo di applicazioni cloud native, secondo quanto previsto dalle metodologie Agile.
Tale presupposto vale anche nel contesto in cui si intende modernizzare un’applicazione legacy attraverso un’operazione di refactoring del codice originale, per renderlo compatibile all’esecuzione su ambienti come i container, utili alla loro distribuzione. L’API gateway consente ad ogni microservizio containerizzato di essere reso disponibile ai vari clienti in maniera efficiente e sicura.
Perché usare un API gateway: i vantaggi e le criticità da superare
L’impiego di un API gateway, per le ragioni fin qui descritte, costituisce una sorta di win-win situation quando si tratta di sviluppare applicazioni cloud native e modernizzare il software legacy, in quanto consente di ridurre la complessità di gestione rendendo al tempo disponibili tutte le funzionalità di cui gli endpoint necessitano per eseguire correttamente le applicazioni.
Ovviamente, a fronte di evidenti benefici, è necessario rilevare una serie di criticità, tra cui il fondamentale tema relativo alla sicurezza. Le API sono infatti delle applicazioni che, se non adeguatamente implementate, rischiano di costituire delle pericolosissime fonti di vulnerabilità, creando un bersaglio preferenziale per le attenzioni dei cybercriminali.
Tre le criticità di carattere più tecnico, è opportuno considerare possibili conflitti derivanti dalle interruzioni. Non è raro che l’aggiornamento di una API generi l’interruzione di un’altra, in particolar modo quando si rileva un problema di coerenza nella progettazione. Tale problema può essere evitato soprattutto nelle fasi iniziali dei progetti di sviluppo, stabilendo in maniera chiara i criteri di design delle API stesse.
Un altro problema relativamente ricorrente in cui si può incorrere con gli API gateway è relativo alla non efficace separazione rispetto all’applicazione, che genera problemi di natura diagnostica quando si tratta di intervenire a scopo risolutivo. L’API agisce quale interfaccia tra più servizi e applicazioni, ma andrebbe in ogni caso sempre concepita come un componente autonomo e disaccoppiato da altri elementi.
Un altro errore tipico in cui è facile incorrere, in assenza di una buona pianificazione iniziale, è quella di non prevedere l’applicazione in virtù delle sue future integrazioni, ritrovandosi una serie di complessità non indifferenti quando si tratta di mantenere il software nel corso del prolungamento del suo ciclo di vita. Questo aspetto vale in particolar modo per le applicazioni “cerniera” come le API.