Le API (Application Programming Interface), in informatica, sono un insieme di definizioni e protocolli per la creazione e l’integrazione di applicazioni software. In altre parole, un’API è un’interfaccia di programmazione che definisce il modo in cui i programmi possono connettersi e comunicare tra loro.
Esistono diversi tipi di API, ognuno dei quali utilizza protocolli e architetture differenti per l’invio di richieste e risposte. Tra le più comuni si trovano XML-RPC, JSON-RPC, SOAP e API REST.
In questo articolo ci concentreremo sull’API REST (Representational State Transfer), uno stile architettonico che utilizza il protocollo HTTP per la comunicazione tra client e server.
Definizione dell’API REST:
REST è uno stile architettonico per la progettazione di API attraverso il protocollo HTTP. Il suo vantaggio principale è la grande flessibilità.
Gli sviluppatori lo utilizzano ovunque sia necessario fornire dati all’utente di un’applicazione web o di un sito direttamente dal server.
Uno dei concetti fondamentali delle API REST sono le risorse. Una risorsa è un oggetto con un tipo, dei dati associati, delle relazioni con altre risorse e un insieme di metodi che operano su di essa. È un concetto molto simile a quello di oggetto nella programmazione, anche se presenta solo alcuni metodi standard: HTTP GET, POST, PUT e DELETE.
Nel computing moderno, un modello comune, è il Client-Server. L’API REST comunica attraverso richieste HTTP, completando le seguenti funzioni: creazione, lettura, aggiornamento e cancellazione di dati, note anche come operazioni CRUD. Ne fornisce le informazioni sulle risorse richieste e utilizza quattro metodi per descrivere cosa fare con una risorsa:
POST – creazione di una risorsa;
GET – per ottenere una risorsa;
PUT – aggiornamento di una risorsa;
DELETE – eliminazione di una risorsa.
Risorsa è un concetto fondamentale, un’astrazione di informazioni. Può essere qualsiasi informazione: documento, immagine, servizio temporaneo. Possono essere fornite al cliente in vari formati: JSON, HTML, XLT, Python o testo semplice. Il formato più popolare e utilizzato è JSON, perché è leggibile da parte dell’uomo e della macchina ed è indipendente dalla lingua.
REST non è legato a una particolare tecnologia o piattaforma. È indipendente dal linguaggio. Inoltre, non specifica con precisione come costruire l’API, ma utilizza sei vincoli architetturali.
I vincoli architetturali sono un insieme di principi progettuali che sono stati definiti da Roy Fielding, uno dei creatori di REST, per garantire la scalabilità, l’affidabilità e l’interoperabilità dei sistemi restful.
Questi vincoli sono:
Client-server: questa separazione dei ruoli consente di migliorare la portabilità del client su diverse piattaforme e l’evoluzione indipendente del server.
Stateless: ogni richiesta client al server deve contenere tutte le informazioni necessarie per comprendere la richiesta. Questo significa che il server non tiene traccia dello stato dell’applicazione per il client, che consente una maggiore scalabilità e affidabilità.
Cache: le risposte alle richieste devono essere esplicitamente o implicitamente contrassegnate come cacheable o non cacheable. Ciò consente una maggiore efficienza del sistema, riducendo il tempo necessario per elaborare le richieste e la banda utilizzata.
Interfaccia uniforme: il protocollo REST utilizza un insieme limitato di operazioni ben definite (ad esempio, GET, POST, PUT, DELETE) per accedere alle risorse. Inoltre, le risorse sono identificate univocamente tramite un URI (Uniform Resource Identifier) e rappresentate nel formato desiderato (ad esempio, JSON, XML).
Sistema stratificato: il sistema restful deve essere stratificato, ovvero composto da uno o più livelli intermedi tra il client e il server. Ciò consente una maggiore flessibilità e scalabilità, poiché ogni livello può essere gestito separatamente.
Codice su richiesta (opzionale): le applicazioni client possono scaricare ed eseguire il codice su richiesta dal server, ad esempio JavaScript. Questo consente una maggiore flessibilità del sistema, ma deve essere utilizzato con cautela poiché aumenta la complessità e la potenziale vulnerabilità del sistema.
L’adesione a questi vincoli architetturali aiuta a garantire che il sistema sia scalabile, affidabile e interoperabile, consentendo inoltre la separazione dei ruoli tra client e server e facilitando l’evoluzione indipendente dei componenti del sistema.
Vantaggi e svantaggi
Tra i vantaggi di REST troviamo:
Scalabilità: REST è altamente scalabile perché il server non tiene alcuna informazione sullo stato del client. In questo modo, la capacità del server può essere facilmente aumentata o diminuita, senza compromettere il funzionamento del sistema.
Interoperabilità: REST utilizza i protocolli HTTP standard e i formati di messaggio, come JSON e XML. Questo rende le applicazioni REST compatibili con qualsiasi sistema in grado di utilizzare HTTP e JSON/XML, rendendole altamente interoperabili.
Semplicità: REST è un’architettura molto semplice e facile da capire, grazie alla sua struttura basata su risorse. Ciò rende più facile per gli sviluppatori implementare e gestire le API REST.
Tuttavia, ci sono anche alcuni svantaggi
Limitazioni del protocollo HTTP: REST si basa principalmente sul protocollo HTTP, che ha alcune limitazioni. Ad esempio, HTTP non è un protocollo stateful, il che significa che il server non mantiene alcuna informazione sullo stato del client. Questo può limitare la complessità delle applicazioni.
Complessità dell’implementazione: Sebbene sia un’architettura semplice, l’implementazione di un’API REST può essere complessa, soprattutto per le applicazioni di grandi dimensioni. Ci sono molte scelte da fare in termini di design e struttura dell’API, e l’implementazione richiede una buona conoscenza dei protocolli HTTP e dei formati di messaggio.
Sicurezza: REST è vulnerabile agli attacchi di sicurezza, come qualsiasi altra tecnologia. Gli sviluppatori devono fare attenzione a proteggere le loro API dalle vulnerabilità comuni come le vulnerabilità di injection e le vulnerabilità di autenticazione.
In generale, REST è una tecnologia molto utile per la creazione di API, ma come con qualsiasi tecnologia, gli sviluppatori devono considerare attentamente i vantaggi e gli svantaggi prima di utilizzarla.
Mattia Linardi