HTTP, Web services e RestSharp (parte 1)

Scritto da  Nicolò Carandini il mercoledì 22 febbraio 2012
Linguaggio: C#   •  Framework: 3.5,4.0   •  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:

HTTP_RestSharp_IMG_01

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:

HTTP_RestSharp_IMG_02

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:

HTTP_RestSharp_IMG_03

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:

HTTP_RestSharp_IMG_04

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:

HTTP_RestSharp_IMG_05

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:

HTTP_RestSharp_IMG_06

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":

HTTP_RestSharp_CODE_HTML

Producendo il risultato mostrato in figura 7:

HTTP_RestSharp_IMG_07

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:

HTTP_RestSharp_IMG_08

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

 
x