L'esempio di implementazione di Web Service che abbiamo visto fin'ora non faceva uso di framework. Ci siamo basati sulla gestione diretta delle richieste e delle risposte HTTP e della rappresentazione delle risorse. In altre parole, il Web Service, oltre a gestire la logica del servizio vero e proprio, si occupava anche dei dettagli relativi alla comunicazione con il client.
La scelta era di taglio didattica, dal momento che l'obiettivo era di mostrare come funziona
l'interazione tra un client ed un servizio RESTful nei suoi meccanismi essenziali, senza alcuna infrastruttura aggiuntiva.
Sebbene REST non indichi l'utilizzo di framework o librerie specifiche, in una situazione reale l'uso di un framework può semplificare l'implementazione di un Web Service, permettendoci di concentrarci sulla logica applicativa senza pensare ai dettagli relativi alla presentazione del servizio ed alla comunicazione con il client.
Le caratteristiche di un framework per servizi RESTful
Generalmente un framework per la creazione di Web Service RESTful mette a disposizione alcune caratteristiche fondamentali, vediamo quali.
Associazione di URI alle risorse
Questa caratteristica, chiamata anche URI routing, consente di associare uno o più URI ad una risorsa, favorendo l'uso di URI con schema posizionale; nel caso del nostro Web Service, ad esempio, un framework ci avrebbe consentito di utilizzare URI del tipo:
http://www.mionegozio.com/ordini/1234
al posto di
http://www.mionegozio.com/ordini/?id=1234
Oltre che per una questione estetica (ricordiamo che i due URI sono perfettamente equivalenti da un punto di vista REST), la capacità di associare un URI ad una risorsa svincola in genere dalla corrispondenza uno a uno tra posizione fisica del modulo che gestisce la risorsa ed il suo URI.
In altre parole, non siamo obbligati a pubblicare la pagina che gestisce la rappresentazione di un ordine nella cartella (virtuale o fisica) /ordini
.
Gestione della comunicazione HTTP
Un framework REST si occupa dei dettagli della comunicazione tra client e server, separando di fatto la logica di gestione della risorsa dalla comunicazione. Non dovremo accedere direttamente alle richieste HTTP, analizzarle, mappare la richiesta su una procedura interna e creare una risposta manualmente. Quello che in linea di massima un framework richiede di fare è specificare il codice da eseguire in corrispondenza a ciascun metodo HTTP.
Semplificazione della rappresentazione delle risorse
La maggior parte dei framework RESTful prevedono il supporto di formati predefiniti, come ad esempio Atom o JSON, cioè sono in grado di creare rappresentazioni di risorse in questi formati. Quasi tutti i framework consentono però anche la generazione della rappresentazione in formati personalizzati.
Alcuni framework sono anche in grado di gestire in automatico della cosiddetta content negotiation, cioè la fornitura di una rappresentazione nel formato richiesto dal client.
Funzionalità di supporto
Un framework può anche fornire supporto per la semplificazione di alcune funzionalità come la gestione dichiarativa della cache, dell'autenticazione, degli errori o l'interfacciamento a protocolli esterni, come ad esempio OAuth.
Supporto per i client
Anche se la realizzazione di un client RESTful è in linea di massima indipendente dal server, alcuni framework mettono a disposizione un supporto per la creazione di un client, semplificando ad esempio la gestione delle chiamate e risposte HTTP e l'interpretazione delle rappresentazioni delle risorse.
Quale Framework scegliere?
Esistono framework per lo sviluppo di Web Service RESTful per i diversi ambienti di programmazione. Nelle prossime lezioni riportiamo una breve sintesi delle caratteristiche di alcuni tra i più diffusi raggruppandoli per ambiente di programmazione.