HTTP, Web services e RestSharp (parte 1)
Scritto da
Nicolò Carandini
il
mercoledì 22 febbraio 2012
Linguaggio:
•
Framework:
•
Livello: 100
Download pdf
HTTP, Web Services e RestSharp
In questo articolo, diviso in due parti, verranno illustrate le
basi su cui poggia la comunicazione nel word wide web e l'uso di
una libreria open source chiamata RestSharp che ci consente di
semplificare notevolmente la scrittura di programmi che accedono a
dati forniti da web services di tipo REST.
Nella prima parte tratteremo del protocollo HTTP, cercando di
affrontare l'argomento in modo leggero e per il minimo
indispensabile necessario ad affrontare la seconda parte,
incentrata sui web services e l'uso della libreria RestSharp.
Comunicazione e protocolli
Ogni comunicazione segue delle regole stabilite per convenzione
e necessariamente rispettate da chi vi partecipa. Un esempio banale
è quello della comunicazione via radio, dove si parla uno alla
volta cedendo la linea con la parola "passo" (o "passo e chiudo" in
caso di fine conversazione). L'insieme di tali regole formano un
protocollo di comunicazione. Ovviamente i protocolli di
comunicazione tra "esseri umani" possono essere molto meno formali
di quelli che avvengono tra "macchine", ma la sostanza non
cambia.
In generale, ogni protocollo prevede non solo diversi tipi di
messaggi, ciascuno con la sua sintassi, ma anche delle regole di
svolgimento della comunicazione. Tornando al mondo reale, nel
rispondere a un telefono fisso senza identificazione del chiamante,
probabilmente andremo ad usare un messaggio del tipo: "pronto, chi
parla?" e tale messaggio risulterà assai familiare a chi ci ha
chiamato e solitamente produrrà un messaggio di risposta con
l'identità del chiamante. Diversamente, se dopo aver instaurato la
comunicazione e avendo appurato chi ci sta chiamando, utilizzassimo
di nuovo il medesimo messaggio ("pronto, chi parla?") il nostro
interlocutore rimarrebbe come minimo sorpreso. In effetti tale
messaggio, pur essendo un messaggio valido, non deve essere usato
in modo contrario alle regole di svolgimento della
comunicazione.
Inoltre alcuni messaggi sono utilizzabili solo in relazione ad
alcuni specifici ruoli. Nel caso precedente, se è il chiamante ad
utilizzare il messaggio "pronto, chi parla?", a casa mia
riceverebbe immediatamente una risposta del tipo: "scusi, lei chi
cercava?", in modo come un altro per segnalare un errore di
protocollo e un suggerimento per riportare la comunicazione sulla
"retta via".
Un esempio molto più complesso e per noi più calzante è quello
delle comunicazioni che si svolgono nella word wide web, che per
molti è sinonimo di internet, detta più brevemente "la rete". E'
utile invece cogliere l'occasione per precisare che si tratta di
due cose diverse, anche se intimamente connesse.
Internet (abbreviazione di Internetwork) è un sistema di
interconnessione di reti diffuso in tutto il mondo, basato sul
protocollo di comunicazione TCP/IP, che consente di scambiare dati
tra un numero davvero immenso di dispositivi (secondo uno studio
Cisco[1] nel 2008 tale numero ha superato la
popolazione mondiale).
Il Word Wide Web è l'insieme di risorse (documenti, immagini e
informazioni in genere) tra loro logicamente collegate tramite
riferimenti (hyperlink) e univocamente identificate (URI[2] - Uniform Resource
Identifier).
Word Wide Web utilizza Internet come struttura di connessione
delle macchine client (quali ad esempio desktop, laptop, tablet e
smartphone) con le macchine server, di modo che le applicazioni
client (generalmente un web browser come Internet Explorer,
Firefox, etc.) possano richiedere alle applicazioni server (web
server o altro) la risorsa richiesta, sia essa un'immagine, una
pagina web, una collezione di dati o altro ancora, come mostrato
nella figura 1:

E' importante aggiungere che, dal punto di vista funzionale, il
termine "Internet" viene spesso utilizzato nella sua accezione più
ampia di "sistema di comunicazione" come sinonimo della "Suite di
protocolli internet", divisa nei suoi quattro livelli, dove ciascun
livello sottostante offre un servizio "trasparente" ai sovrastanti
e ogni livello dialoga col suo omologo, come mostrato nella figura
2:

In effetti il Word Wide Web, che da ora in poi chiameremo per
brevità semplicemente Web, è solo uno dei possibili livelli
applicativi che utilizzano Internet come infrastruttura di
interconnessione per lo scambio dati. Altri livelli applicativi
assai noti sono la posta elettronica (SMTP, PO3, IMAP), la
telefonia (SIP, VoIP), il trasferimento di file (FTP). Le sigle fra
parentesi si riferiscono ad alcuni dei protocolli utilizzati da
detti livelli applicativi.
Il motivo per il quale Web e Internet sono diventati sinonimi è
da ricercare nella assoluta preponderanza e notorietà di tale
livello applicativo rispetto agli altri. Basti pensare che ad
oggi[3] si stima un numero di pagine web
superiore a 8,44 miliardi.
Il protocollo HTTP
Quando usiamo un web browser per navigare su Internet o uno
smartphone per "twittare", l'applicazione client comunica con
l'applicazione server mediante un protocollo chiamato HTTP
(HyperText Transfer Protocol), ideato da Berners-Lee e Cailliau nel
1990 durante la realizzazione di Mosaic[4].
I messaggi http si dividono in request messages e response
message. Il client invia una richiesta e il server restituisce una
risposta, come mostrato nella figura 3:

Sintassi dei messaggi
Una trattazione completa della sintassi del protocollo HTTP
esula dagli scopi di questo articolo, quindi ci limiteremo a
fornirne gli aspetti essenziali.
I messaggi sono composti da tre parti: una start line che
descrive il messaggio, un blocco di headers che contiene gli
attributi e un body (opzionale) col contenuto del messaggio. La
start line e gli headers sono formati da testo ASCII e il blocco
degli headers è formato da una riga per ogni attributo, seguito da
una linea vuota, come mostrato nella figura 4:

La start line della richiesta è formata da tre parti: method,
request-URI e version.
I metodi disponibili sono: CONNECT, DELETE, GET, HEAD, OPTIONS,
POST, PUT, TRACE, di cui i più noti sono GET e POST. La versione è
tipicamente "HTTP/1.1" o "HTTP/1.0". L'URI (Uniform Resource
Identifier) è la generalizzazione del più noto URL (Uniform
Resource Locator) e in questo contesto sono di fatto equivalenti[5]. Esso è composto
da più parti, come mostrato in figura 5:

Fiddler HTTP debugger
Per visualizzare i messaggi HTTP che vengono scambiati tra
Client e Server, è davvero utile (direi indispensabile) utilizzare
Fiddler, un HTTP debugger scaricabile gratuitamente da http://fiddler2.com.
Per mostrare come funziona, cerchiamo di visualizzare il
contenuto della risorsa identificata dall'URI utilizzato nel
precedente esempio, excludendo per brevità le informazioni di user
e password. Sfruttando una caratteristica del protocollo HTTP che
prevede la possibilità di utilizzare dei proxies, Fiddler si
frappone tra il Client e l'Origin Server intercettando sia le
richieste del client sia le risposte del server, come mostrato in
figura 6:

In questo caso specifico possiamo notare che Fiddler non si
limita riportare la risposta del server (404 Not Found) ma la
arricchisce restituendo al web browser una risposta di tipo
"text/http":

Producendo il risultato mostrato in figura 7:

Con Fiddler l'analisi e la comprensione del protocollo HTTP
diventa davvero facile. Basta installarlo e navigare in rete
utilizzando un web browser per avere un elenco completo di tutti i
messaggi HTTP con tutte le informazioni che li compongono, come
mostrato in figura 8:

Per ulteriori e più approfondite informazioni relative al
protocollo HTTP, si consiglia la lettura dei seguenti testi:
- Stephen Thomas, "HTTP Essentials", edito da WILEY (ISBN-10:
0471398233)
- David Gourley & Brian Totty, "HTTP The Definitive Guide",
edito da O'Reilly (ISBN-10: 1565925092)
Parte seconda
Nella prossima parte identificheremo i diversi tipi di servizi
web disponibili e mostreremo come utilizzare le informazioni
contenute in questa prima parte per realizzare facilmente, grazie
anche alla libreria RestSharp, dei programmi client che utilizzano
i dati forniti da servizi web di tipo REST.
[1]
http://blogs.cisco.com/news/the-internet-of-things-infographic/
[2] L'URI è forma più generale del ben
più noto URL - Uniform Resource Locator
[3] In data 11/02/2012, fonte: http://www.worldwidewebsize.com/
[4] Per una storia più dettagliata
delle origini del Web: http://it.wikipedia.org/wiki/Tim_Berners-Lee
[5] Per maggiori informazioni vedi: http://it.wikipedia.org/wiki/Uniform_Resource_Identifier
Tags: Rest,http,web service,restsharp