Che cos'è API REST?
API REST si è affermata come l'interfaccia API per servizi web più versatile e utile. Grazie alla sua semplicità, flessibilità e compatibilità, è ideale per lavorare con diversi tipi di dati e interfacciarsi con la maggior parte delle applicazioni più note. In questo articolo descriveremo le API REST (o RESTful) e faremo un confronto con la tecnologia precedente, SOAP. Vedremo anche come funzionano le API REST e perché l'evoluzione verso l'integrazione cloud rende le API REST così essenziali per le imprese odierne.
Che cos'è API REST?
API REST (Representational State Transfer) o RESTful è un tipo di API (Application Program Interface) che consente alle applicazioni di servizi web di comunicare fra loro. Teoricamente REST è compatibile con qualsiasi protocollo o formato di dati, ma prevalentemente utilizza il protocollo HTTP e trasferisce i dati con JSON (JavaScript Object Notation). REST è una delle soluzioni più diffuse per ottenere dati dal web, grazie alla sua flessibilità, velocità e semplicità.
Fino al 2000, SOAP (Simple Object Access Protocol), sviluppato da Microsoft, era la piattaforma più utilizzata per le interazioni client-server. Pur essendo tanto utile quanto diffuso, il protocollo SOAP presentava due svantaggi. In primo luogo, costringeva l'utente a seguire regole rigide per l'interazione con il server. In secondo luogo, si basava sul pesante formato XML.
Insoddisfatto della metodologia SOAP, l'informatico Roy Fielding propose un'alternativa chiamata “REST” nella sua tesi di dottorato nell'anno 2000. Le caratteristiche chiave che distinguono REST dal suo predecessore sono maggiore flessibilità, velocità superiore e larghezza di banda ridotta. Oggi REST è uno dei tipi di API più diffusi e viene utilizzato dalla maggior parte dei provider di servizi web fra cui Amazon, Facebook, Twitter e Google.
Concezione di API REST
Come tutte le API, REST consente di trasferire dati fra utenti e applicazioni. Ad esempio, quando ci si collega a un sito web o si accede a un'app sullo smartphone, le API consentono al dispositivo client di comunicare con il server host. Le API, in pratica, sono "messaggeri" che consegnano le richieste dell'utente al server e riportano la risposta del server.
Richiesta del client
Il processo inizia quando un client nell'architettura REST usa comandi HTTP per inviare richieste al server. Ad esempio, quando si apre una pagina web digitando un indirizzo URL, viene inviata una richiesta HTTP del tipo "VAI + URL". Allo stesso modo, un client REST usa questo tipo di comandi per accedere alle informazioni richieste. I comandi HTTP più comuni sono:
- GET – per ottenere una risorsa specifica
- POST – per creare una nuova risorsa
- PUT – per aggiornare una risorsa esistente
- DELETE – per cancellare una risorsa esistente
Ad esempio, il comando HTTP “GET https://api.bookseller.com/customers/” richiama i nomi di tutti i clienti dal sito web della libreria.
Risposta del server
Una volta inviata una richiesta dal client, la API REST ottiene e fornisce una risposta. La risposta può contenere le risorse più svariate, come dati, immagini, video, indirizzi web, commenti, post su blog, tweet ecc. Quando il client richiede una risorsa al server, il server non invia la risorsa vera e propria, ma risponde con una rappresentazione della risorsa stessa.
Queste risposte vengono inviate nella maggior parte dei casi in formato JSON. Questo formato è leggibile sia da persone sia da macchine e la sua compatibilità con la maggior parte dei linguaggi di programmazione ne fa una scelta ideale per la flessibilità di API REST.
6 vincoli di API REST
Uno dei grandi vantaggi delle API REST è la semplicità delle regole di sintassi, che tuttavia funzionano con un insieme di regole di progettazione, dette "vincoli". Per essere considerata RESTful, un'API deve rispettare i sei vincoli seguenti:
Interfaccia uniforme
Avere un'interfaccia uniforme significa che ogni client REST può chiamare il server e accedere alle sue risorse nello stesso modo, che il client sia un browser, un codice JavaScript o un'applicazione mobile. Questo è possibile grazie all'utilizzo di un URI (Unique Resource Identifier), che spesso è un indirizzo URL come “https://api.twitter.com/”.
Richieste e risposte devono essere autosufficienti: il client invia tutte le informazioni di cui il server ha bisogno per elaborare la richiesta e il server restituisce una risposta con le informazioni per modificare, cancellare o semplicemente accedere alla risorsa richiesta.
Il server deve essere in grado di inserire collegamenti ipertestuali (link) che consentano al client di modificare la risorsa. Questa funzionalità viene detta ‘hypermedia as the engine of application state’ (HATEOAS).
Architettura client-server
Nell'architettura REST, i componenti client e server sono chiaramente definiti e separati. Questa concezione modulare consente di sostituire entrambi i componenti individualmente, senza alcun impatto sull'altro. La maggior parte dei client e server web è progettata in questo modo; REST semplicemente rende esplicito il vincolo.
Assenza di stato
In un sistema RESTful, le interazioni client-server sono prive di stato. Questo significa che il server non deve ricordare lo stato del client registrandolo in memoria o nel database. Pertanto, tutte le informazioni necessarie al server per restituire i dati devono essere incluse in ogni richiesta.
L'assenza di stato trasferisce la responsabilità di mantenere lo stato dell'applicazione interamente al client. Il server diventa leggero perché non deve memorizzare dati aggiuntivi sulle chiamate del server per gestire richieste future.
La scalabilità risulta più semplice in un'architettura priva di stato. Tuttavia, i client potrebbero avere la necessità di inviare più chiamate a un server per ottenere i dati, riducendo le prestazioni. Solitamente gli sviluppatori web trovano soluzioni per ottimizzare le prestazioni delle applicazioni client riducendo il numero di passaggi al server.
Sistema stratificato
Un sistema stratificato si basa sul completo disaccoppiamento fra client e server. Quando un'applicazione client fa una richiesta utilizzando un URL di destinazione, non è necessario che sappia esattamente quale server risponderà alla richiesta. Possono esistere molteplici livelli di server, ciascuno dei quali svolge funzioni specifiche come bilanciamento del carico, caching ecc., ma il client resta ignaro di tutta questa attività "dietro le quinte".
La stratificazione aumenta la sicurezza di API REST, poiché eventuali attacchi o eventi possono essere isolati e contenuti in singoli livelli. Inoltre, l'architettura non è mai esposta nella sua interezza.
Memorizzazione dei dati in cache
I server REST possono conservare dati nella memoria cache. Utilizzando l'intestazione Cache-Control, il server comunica al client se i dati vengono messi in cache (oppure no) e il lasso di tempo in cui una risposta specifica è valida. Una volta scaduto questo termine, il client contatta (ping) nuovamente il server per avere un aggiornamento. Si possono utilizzare anche numeri progressivi di versione affinché il client possa verificare se è in possesso dello stato più recente della risorsa richiesta.
Codice su richiesta
Questo è l'unico vincolo facoltativo in un progetto REST. Il codice "on demand" è una funzionalità con cui il server invia uno snippet di codice che il client esegue sul proprio lato. Ad esempio, il codice viene inviato come JavaScript in una risposta HTML.
Differenze fra SOAP e API RESTful
Il dibattito fra REST e SOAP ha caratterizzato gran parte degli ultimi due decenni. Ogni interfaccia è destinata a usi specifici e ognuna ha punti di forza e di debolezza. Nonostante molte aziende continuino a utilizzare SOAP, REST si è affermata come l'interfaccia API più diffusa grazie alla sua adattabilità e all'architettura leggera. Per capire che cosa distingue REST da SOAP, è utile confrontare i due sistemi:
SOAP è un protocollo mentre REST è uno stile di progettazione. SOAP richiede standard di comunicazione e sintassi molto più rigidi, mentre REST definisce solo direttive architetturali di alto livello (sei vincoli), offrendo quindi maggiore flessibilità nell'implementazione.
REST ha prestazioni più veloci perché consuma meno larghezza di banda e risorse. SOAP funziona solo con dati in formato XML, che generano file più pesanti. REST può gestire formati meno pesanti come HTML, JSON e persino testo semplice.
SOAP richiede un legame più stretto fra client e server. Quando si invoca la funzione server di SOAP, il client SOAP deve conoscere l'esatta firma di queste funzioni. Se la firma cambia, l'interfaccia si interrompe.
Poiché un client REST chiama solo i nomi delle risorse, non deve conoscere necessariamente i dettagli di implementazione dell'API. Se il server cambia la sua implementazione, il client non deve effettuare alcuna modifica. In questo modo REST offre un grado di separazione maggiore fra client e server rispetto a SOAP.
Le call di REST possono essere memorizzate nella cache. Questa proprietà delle API REST fa sì che i dati possano essere riutilizzati dal browser web invece di inviare più chiamate al server. Si tratta di un'opzione di progettazione più sofisticata che contribuisce a risparmiare larghezza di banda.
SOAP viene considerato generalmente più sicuro. SOAP supporta gli standard WS-Security e SSL. Presenta inoltre la conformità ACID (Atomicity, Consistency, Isolation, Durability) incorporata che lo rende più idoneo per applicazioni e sistemi con requisiti di sicurezza elevati, ad esempio quelli che trattano dati sensibili come gateway di pagamenti e servizi di telecomunicazioni. In ogni caso, REST supporta gli standard SSL e HTTPS.
API REST e integrazione cloud
Attualmente il fenomeno più rilevante nella gestione dei dati è l'evoluzione verso l'integrazione in cloud. Le API consentono agli utenti di accedere a informazioni conservate nel cloud, su molteplici server e in diversi formati. Nonostante le API REST vengano utilizzate più frequentemente con piattaforme SaaS (Software as a Solution), esse svolgono un ruolo importante anche per i fornitori PaaS (Platform as a Service). Fra i provider più noti che utilizzano API RESTful possiamo citare Oracle, Jira, Google, Adobe, Amazon e GitHub.
Con tutte le implicazioni del passaggio al cloud computing, sempre più aziende cercano il modo di assicurarsi che i loro prodotti e servizi siano pronti per offrire tutte le funzionalità del cloud. Nella maggior parte dei casi questo comporta l'utilizzo di uno strumento di integrazione cloud che fornisca connettore e funzionalità API REST.
Cloud API Services di Talend semplifica il processo di creazione delle API per ottenere il massimo dai dati disponibili. Con un set di strumenti completo per assicurare la qualità dei dati e oltre 900 connettori, si possono realizzare e attivare API con una velocità senza precedenti. Scarica una prova gratuita oggi stesso per scoprire quanto è semplice realizzare l'integrazione.