Sono sicuro che da diverso tempo senti parlare di REST e probabilmente nel tuo percorso hai anche incontrato il termine RESTful API, ma che cosa nascondono questi termini e perché possono interessare a uno sviluppatore web?
Nel mio lavoro mi capita molto spesso di formare nuovi sviluppatori che desiderano creare la prossima grande applicazione che verrà utilizzata dal mondo intero.
Alcuni mirano a creare un nuovo Facebook, altri a creare il nuovo Airbnb mentre altri ancora hanno in mente qualcosa di totalmente diverso.
Corsi utili alle tue necessità
Se anche tu vuoi avviare o migliorare la tua carriera come sviluppatore ti ricordo che abbiamo diversi corsi che potrebbero essere utili, la cosa bella è che ne pubblichiamo sempre di nuovi!
Dato che sono diversi anni che seguo questo campo, anche dal punto di vista del marketing, molto spesso mi trovo a chiedere ai miei studenti:
“Come pensi di scalare la tua applicazione?”
Quella che ritengo una semplice domanda ottiene spesso le risposte più varie.
Alcuni mi rispondono con profonde analisi su come andranno a scalare l’architettura dell’infrastruttura hardware, altri hanno già valutato l’utilizzo di un diverso linguaggio di programmazione mentre altri ancora mi parlano della brillante idea di assumere freelancer indiani (per il loro basso costo) che li aiuteranno a incrementare le funzionalità offerte dall’applicazione stessa.
Il problema che mi trovo ad affrontare è che non sono queste le risposte che mi aspetto, piuttosto quello che avrei voluto sentire è come consentire ad altri sviluppatori di accedere alle informazioni contenute all’interno della propria applicazione e magari anche di crearne di nuove.
Probabilmente quanto appena detto ha spiazzato anche te, ma se stiamo costruendo qualcosa per le masse dobbiamo anche garantirci un metodo per raggiungerle nel modo più semplice possibile.
Questo perché Facebook, Twitter, GitHub e lo stesso Unsplash non sarebbero arrivati a coprire l’importanza sul mercato che hanno oggi se non avessero messo a disposizione un set di API.
Ma non dovevamo parlare di REST?
Ti faccio i miei complimenti, nonostante la mia introduzione ti ricordi ancora il titolo di questo articolo e magari è proprio il motivo per il quale stai ancora leggendo.
Non ti preoccupare, a breve andremo ad approfondire il significato e gli usi di questo acronimo ma ho avuto la necessità di introdurti prima i concetti relativi alle API per farti capire nel complesso come sia possibile sfruttare queste caratteristiche all’interno della tua prossima applicazione.
Dalla frase precedente forse ti sei chiesto perché mettere a disposizione le informazioni collezionate dalla tua applicazione anche ad altri sviluppatori.
Se utilizzi una widget Facebook, Twitter o anche Pinterest all’interno del tuo sito web la risposta dovrebbe essere ovvia: perché fornendo queste informazioni potrai raggiungere un’audience maggiore rappresentata da tutti i siti web che vogliono mostrare il contenuto raccolto dalla tua app.
Anche se essenziale alla crescita di qualsiasi applicazione mettiamo per un momento da parte il marketing.
Sviluppare un set di API è un ottimo esercizio di sviluppo. Lo vediamo da diversi anni ormai e adesso che anche WordPress offre le sue API possiamo iniziare a sviluppare più facilmente.
Con l’acronimo API si intende Application Programming Interface e non è altro che la creazione di una serie di endpoint (delle URL) che rispondono alle richieste fatte da uno sviluppatore.
Praticamente una raccolta di metodi che ci permettono di collegare librerie o applicazioni presenti su diversi sistemi.
Il significato di REST e RESTful API
Se non ti ho ancora perso ma anzi ti sei ulteriormente incuriosito, non posso fare altro che premiarti dicendoti che il significato dell’acronimo REST è REpresentational State Transfer, ovvero una rappresentazione del trasferimento di stato di un determinato dato.
Comprendo che probabilmente la spiegazione non è stata di tuo gradimento ma ti confesso che c’è veramente ben poco altro da capire a riguardo.
Questo perché REST non è una tecnologia, piuttosto descrive una serie di linee guida e di approcci che definiscono lo stile con cui i dati vengono trasmessi.
Dato l’interesse sulla trasmissione di dati questa tecnica viene spesso utilizzata per la creazione di applicazioni web ma spero che non ti stupisca troppo che lo stesso Windows ha una serie di API che permettono alle proprie applicazioni di comunicare tra loro.
Nel web moderno ormai REST e API sono termini che si usano quasi indistintamente, ma non dimenticarti che non sono la stessa cosa, tantomeno dei sinonimi!
Da bravo sviluppatore quello che potrai fare è creare un set di API che rispettano la logica imposta da REST creando un set di RESTful API.
È possibile definire un’architettura standard per le REST?
Rispondo immediatamente a questa domanda in modo secco: non è possibile definire uno standard perché l’approccio sulla loro costruzione può variare da sviluppatore a sviluppatore.
Quello che però è possibile fare è tracciare alcuni punti che generalmente sono presenti all’interno di qualsiasi applicazione di questo tipo:
- c’è una consistenza all’interno dell’intera API;
- lo sviluppo di questa soluzione non implica la creazione di sessioni all’interno dei nostri server creando quindi un’esistenza stateless dove il nostro server, tra un’operazione e un’altra, non salva le informazioni di login;
- quando appropriato vengono utilizzati gli status code HTTP che aiutano e velocizzano le risposte dei nostri server;
- vengono create delle URL endpoint che seguono una determinata logica;
- la versione delle API viene salvata nelle URL piuttosto che all’interno degli status code HTTP.
Uno sguardo alle versioni delle API
Parlando della versione delle API salvata come endpoint URL possiamo facilmente fare riferimento a quelle rilasciate dalla nostra piattaforma WordPress. Oggi è possibile utilizzare la seconda versione delle REST inserendo un URL di questo tipo: http://tuodominio.it/wp-json/wp/v2/posts
.
Come ti ho già avvisato non possiamo considerare queste regole come dei comandamenti che lo sviluppatore segue durante lo sviluppo o l’utilizzo di RESTful API ma dato che sono presenti all’interno di moltissime soluzioni già implementate possiamo aspettarci di trovarne alcune (se non tutte) all’interno delle API rilasciate da alcuni servizi.
Sono convinto che tutte queste informazioni teoriche ti stanno facendo girare la testa, quindi perché non andiamo ad analizzare qualcosa di più pratico come per esempio le azioni che possiamo svolgere con questa tecnologia?
Se hai già sviluppato qualche applicazione web che fa uso di database forse i prossimi punti ti suoneranno familiari, questo perché anche se stiamo utilizzando delle API stiamo sempre svolgendo delle operazioni all’interno di un database installato su qualche server connesso online:
GET
questo ci permette di richiedere al server un determinato set di dati;POST
la possibilità di creare un nuovo oggetto all’interno del database;PUT
con questo possiamo modificare o sostituire completamente un oggetto già esistente;DELETE
possiamo, da remoto, cancellare un oggetto contenuto all’interno del database al quale siamo collegati.
Praticamente una buona API ci permette di fare tutte queste operazioni senza la necessità di dover accedere direttamente al database o alla soluzione implementata per il salvataggio delle informazioni.
Ogni azione descritta precedentemente deve essere passata a uno specifico endpoint che ci permetterà di ottenere determinate funzionalità.
Ma quando si usano queste soluzioni?
Probabilmente sto mettendo troppa carne al fuoco o forse è soltanto frutto della mia immaginazione ma sento il bisogno di spiegare ulteriormente (e a parole mie) il significato e gli utilizzi di questi acronimi.
Se ti senti confidente e sei sicuro di aver compreso bene i concetti che abbiamo esposto precedentemente, puoi saltare tranquillamente nella sezione successiva di questo articolo.
Continuando a leggere scoprirai ulteriori concetti che ti potranno essere utili nel tuo lavoro.
Iniziamo subito con un esempio.
Hai il tuo sito web su http://tuodominio.it
all’interno del quale pubblichi ogni settimana del nuovo contenuto. Il tuo desiderio adesso è quello di inserire nella sidebar di http://altrotuodominio.it
una widget in grado di visualizzare gli ultimi 5 articoli pubblicati sul sito precedente.
Immagino tu sappia che esiste una tecnologia chiamata RSS che permette di sviluppare una soluzione in grado di ottenere gli ultimi articoli che sono stati pubblicati su un altro blog, magari aiutato dalla libreria PHP SimplePie.
Non conoscevi SimplePie?
Se non conoscevi già questa soluzione spero di averti presentato una tecnologia utile al tuo lavoro. Tra l’altro la libreria SimplePie è integrata nel tuo WordPress e sarà veramente semplice utilizzarla 😉
Con una libreria del genere puoi raggiungere il risultato desiderato ma che succede se decidi di mostrare dal 20esimo al 25esimo articolo presente sul tuo sito di riferimento?
Molto probabilmente la soluzione che ti ho appena indicato non è più utilizzabile perché, a meno di configurazioni specifiche, un feed RSS è in grado di distribuire soltanto gli ultimi 10 articoli apparsi in un blog.
Facciamola anche più difficile…
Come potresti fare se su http://altrotuodominio.it
decidi di inserire un motore di ricerca per gli articoli presenti su http://tuodominio.it
?
Adesso il problema non può più essere risolto con un semplice feed RSS…
Ebbene per raggiungere questo risultato una delle soluzioni più semplici che potrai mettere in atto è utilizzare delle RESTful API. Con un’installazione WordPress possiamo risolvere i precedenti problemi con le seguenti endpoint URL:
http://tuodominio.it/wp-json/wp/v2/posts?offset=20&per_page=5
– con questa URL sarai in grado di ottenere in risposta l’oggetto JSON che contiene gli articoli dal 20 al 25;http://tuodominio.it/wp-json/wp/v2/posts?search=stringa%20da%20cercare
– mentre grazie a questa potrai cercare “stringa da cercare” all’interno del sito esterno.
Ovviamente dovrai inserire su http://altrotuodominio.it
il codice PHP o JavaScript in grado di utilizzare i dati dell’oggetto JSON che otterrai in risposta ma tutto il duro lavoro di raccogliere gli articoli adeguati o di eseguire una ricerca sul sito principale vengono svolti dalle API che stiamo utilizzando.
Al posto di sviluppare una soluzione ad hoc che ti consente di connetterti al database principale ed eseguire le query specifiche credo proprio che la soluzione precedente risulti molto più semplice, non lo pensi anche tu?
Come connettersi alle API nel mondo reale
Spero che con le informazioni che ti ho fornito adesso il concetto di RESTful API sia più chiaro, in fin dei conti non è altro che un insieme di tecniche che ci permettono di collegarsi a un server esterno ed eseguire alcune operazioni sui dati che esso contiene.
Per il momento ci siamo impegnati su delle richieste di tipo GET
per due motivi principali:
- sono il tipo di richieste che qualsiasi API è in grado di soddisfare, sempre se programmata per restituire dei dati;
- sono il tipo di richieste che possiamo fare senza richiedere un’autenticazione, ovviamente a meno che il servizio che stiamo utilizzando non la richieda esplicitamente.
Quindi, anche se precedentemente ti avevo detto che con delle RESTful API non vengono salvate informazioni di login tra un’operazione e un’altra, questo non vuol dire che non possiamo eseguire un login ad ogni operazione.
Questo concetto apre le porte a molti altri aspetti che potremmo trattare in successivi articoli o magari in un corso dedicato ma la cosa importante che ti voglio far capire è che (giustamente) chi crea un set di API non permette a chiunque di scrivere dei dati all’interno della propria applicazione.
A parte la possibilità di permettere agli utenti di inserire del codice malevolo, attraverso azioni di tipo POST
, se lasciamo aperte anche le azioni di tipo PUT
e DELETE
rischiamo di ritrovarci con un database completamente vuoto!
Per questo motivo, a ogni richiesta via API che desidera utilizzare queste azioni, è necessario loggarsi all’interno del sistema che vogliamo utilizzare.
Per fare questo generalmente si usa una tecnologia che prende il nome di oAuth e che permette di creare delle connessioni sicure tra computer andando a salvare un token che è consultabile soltanto dai computer che hanno eseguito questa connessione.
Come dicevo precedentemente, non è mia intenzione entrare nel dettaglio del protocollo oAuth perché per quanto il funzionamento possa sembrare semplice, ci sono molti concetti di sicurezza al suo interno che mi forzeranno a delle spiegazioni approfondite.
Ho desiderato citarlo perché come accade molto spesso doverlo utilizzare ma voglio lasciare l’approfondimento di questo aspetto in un articolo separato.
Sei curioso di scoprire come funziona questa tecnica di autenticazione? Fammelo sapere all’interno dei commenti 😉
Conclusioni
Siamo giunti al termine di questo articolo la mia speranza è che tu possa uscirne soddisfatto e con qualche concetto in più salvo nella tua mente.
In fin dei conti quando si parla di RESTful API e di REST in generale le informazioni base che si possono offrire non sono poi molte perché a parte alcuni concetti standard, come per esempio le operazioni che possono essere svolte attraverso questa tecnologia, tutto il resto si affida a come il servizio ha strutturato il suo servizio.
Come hai visto, WordPress ha creato delle API molto semplici dove basta utilizzare la corretta URL per ottenere in GET
le informazioni che stiamo cercando, ma non sempre è così e bisogna leggere le documentazioni dei singoli servizi.
Leggendo per esempio quella delle API di Unsplash si scopre che questo servizio non risponde alle proprie URL restituendo un oggetto JSON ma fornendoci il link all’immagine che stiamo cercando.
Ora sto forse divulgando troppo e non sto trattando il servizio che a te interessa, ma ti assicuro che una volta che avrai compreso come sia semplice includere le REST nel tuo sviluppo sarai in grado di fare moltissime altre cose senza dover creare necessariamente l’infrastruttura che sta alla base.
Non esitare a farmi sapere che cosa ne pensi e se hai beneficiato dalla lettura di questo articolo. Soprattutto fammi capire se sei interessato a questo argomento, mi fa sempre piacere leggere i tuoi commenti e trarre nuovi spunti per creare nuovi articoli e corsi!
Marco Pestrin dice
Ciao Andrea, io sarei interessato ad avere più informazioni su come funzionano le tecniche di autenticazione che hai parlato. Riusciresti a fare un articolo partendo dalle basi? Grazie mille
Andrea Barghigiani dice
Molto volentieri Marco!
Dato che le autenticazioni possono variare da libreria a libreria, avevi in mente qualcosa di particolare oppure andiamo a ruota libera andando a descriverle in modo più teorico?
A presto,
Andrea
Luigi dice
Bellissimo articolo. Grazie!
Andrea Barghigiani dice
Grazie a te Luigi per aver trovato il tempo di leggere il nostro articolo. Ci fa un’incredibile piacere sapere che trovi utili i nostri contenuti e se ci vuoi fare un regalo ancora più grosso sappi che una tua condivisione sarebbe incredibilmente apprezzata!
Stiamo cercando di crescere e farci conoscere il più possibile quindi qualsiasi aiuto, qualsiasi condivisione può aiutarci ad incrementare il numero di persone che possiamo aiutare.
Grazie mille e a presto,
Andrea
mapo dice
Wow! Al contrario di molti articoli noiosi questo riesce a rapire il lettore fino alla fine e ad incuriosirlo ulteriormente.
Andrea Barghigiani dice
Ciao Mapo,
grazie mille a te per il bellissimo commento. È un incredibile piacere sapere che il nostro contenuto viene apprezzato, non sai quanto questo sia difficile soprattutto quando si parla di sviluppo.
Spero che tu trovi altri contenuti interessanti all’interno del nostro portale e se hai qualche richiesta da farci ricorda che esiste sempre la pagina dei Contatti 😉
Buon proseguimento di giornata e a presto,
Andrea
daniele (@Danidiviso3) dice
Quello che cercavo. Ottimo articolo e ben spiegato!
Andrea Barghigiani dice
Grazie mille Daniele per essere passato dalle nostre parti e per aver apprezzato il nostro articolo. Se vuoi scoprire le ultime novità come i corsi e gli articoli che pubblichiamo non dimenticarti di iscriverti alla nostra newsletter!
A presto,
Andrea
SenzaDistrazioni (@Archistico) dice
Ciao, sono davvero interessata alla tecnologia oAuth, per caso avete già trattato il tema sul vostro stupendo sito?
Grazie
Emilie
Andrea Barghigiani dice
Ciao Emilie,
al momento non abbiamo creato alcun articolo su oAuth e su come sfruttarla, anche perché a seconda del linguaggio di programmazione o del servizio utilizzato sono presenti delle librerie specifiche che semplificano la gestione di un login di questo tipo. Oggi è molto comune fare anche le login attraverso i social network e questi offrono le proprie soluzioni che rendono il tutto un gioco da ragazzi.
Crearsi da soli un server che gestisca queste login, l’altro aspetto che tiene in piedi questa tecnologia, è invece più interessante per i sistemisti che purtroppo non è un tipo di pubblico o argomenti che trattiamo spesso su questo sito.
Spero comunque di averti aiutata a capire meglio la situazione, se vuoi un po’ di documentazione a riguardo (ne trovi moltissima) possono essere il sito del progetto e la pagina del manuale PHP.
A presto,
Andrea
Gianmario dice
Fantastico articolo, grazie mille per la pubblicazione!
Andrea Barghigiani dice
Ciao GianMario, mi fa molto piacere che ti sia piaciuto questo articolo e spero che anche gli altri che pubblicheremo potranno tornarti altrettando utili!
marika dice
Ho sentito il dovere di farti i complimenti per la chiarezza, articolo interessante. Grazie.
Andrea Barghigiani dice
Che dire Marika,
grazie mille a te per aver investito il tuo tempo per pubblicare questo commento! Leggere queste frasi ci riempie di gioia e ci fa capire che il contenuto che pubblichiamo viene considerato utile e degno di essere letto.
Spero che troverai anche altri contenuti interessanti 😉
A presto,
Andrea
Marco dice
Salve, cosa si può dire riguardo il metodo PATCH?
Andrea Barghigiani dice
Ciao Marco,
onestamente non sonoscevo questo metodo HTTP ma a quanto capisco da MDN si tratta di un metodo molto simile a PUT che però non assicura lo stesso risultato se utilizzato con lo stesso percorso.
Mi dispiace non poterti aiutare oltre ma quando si tratta di REST gli unici metodi che utilizziamo sono GET e POST (penso di non sbagliarmi) mentre tutto gli altri metodi HTTP non vengono generalmente presi in considerazione perché sarà il servizio che mette a disposizioni le REST API ad eseguire le operazioni necessarie in base ai dati che gli stiamo passando.
Claudia dice
Grande, grazie. Ti spiacerebbe aggiungere anche un posticino per la data di aggiornamento, da qualche parte? Il blog mi sembra neonato (ho visto un copyright del 2019), ma a volte capita di seguire articoli un po’obsoleti senza rendersene conto e in questi….”cappero” di argomenti, il materiale è infinito e in continuo divenire… E’ il lato affascinante e laborioso allo stesso tempo 🙂
grazie.
Andrea Barghigiani dice
Ciao Claudia,
generalmente torniamo ad aggiornare i materiali man mano che vediamo che iniziano a diventare obsoleti. Il blog non è giovane perché pubblichiamo dal 2015 ma hai ragione, qualche data in più potrebbe far comodo.
Stiamo lavorando al restyle del sito e aggiungeremo sicuramente la data.
Grazie per il suggerimento e per i complimenti.
Giuseppe Guglielmino dice
Bravo Andrea, Chiaro e conciso
Continuerò a seguirti e certo pubblica pure l’articolo sull’oAuth
Andrea Bizioli dice
Finalmente un articolo chiaro, scorrevole, semplice ed esaustivo sull’argomento.
I miei complimenti
Ste dice
Premetto che non sono uno sviluppatore, i miei ultimi programmi li sviluppai in COBOL molti anni fa…
Sono arrivato fin qui per cercare di capire il significato di REST termine che ho trovato indagando a proposito di Azure WepApp.
L’articolo è ben scritto ma sinceramente non è riuscito a chiarirmi il significato di REST… 🙁
Andrea Barghigiani dice
Ciao Ste,
mi dispiace che l’articolo non ti abbia aiutato a fare chiarezza sul termine e sulle funzionalità di questa potente soluzione. Forse la lettura di questo altro articolo dedicato alle REST API di WordPress può aiutarti ulteriormente, contiene anche un video realizzato da un professore universitario.
Comunque se hai bisogno di ulteriori chiarimenti esponi nel dettaglio i tuoi dubbi e cercherò di aiutarti ?