Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

SOAP: far comunicare le applicazioni sul Web

SOAP, il protocollo basato su XML per l'interazione tra applicazioni Web
SOAP, il protocollo basato su XML per l'interazione tra applicazioni Web
Link copiato negli appunti

Come tutti sappiamo il Web è una fonte inesauribile di informazioni. Milioni di pagine mettono a disposizione dati di qualsiasi tipo che possiamo utilizzare per lavoro, per hobby o per divertimento. Tuttavia le informazioni pubblicate sul Web sono fruibili soltanto da esseri umani dotati di browser e non si prestano bene per la loro elaborazione da parte di applicazioni software.

Immaginiamo il seguente scenario: dobbiamo acquistare un libro ed abbiamo un elenco di indirizzi di siti Web internazionali che vendono libri on line. L'approccio classico a questo problema consiste nel dotarci di una buona dose di pazienza e di visitare ciascun sito, ricercare il libro che ci interessa, prendere nota del prezzo e delle spese di spedizione. Una volta compilata la lista dei prezzi praticati dai diversi rivenditori on line dobbiamo riportare i prezzi in un'unica valuta, ad esempio l'euro, per poterli confrontare e finalmente individuare il rivenditore più conveniente.

Queste operazioni richiedono un certo impegno per poter essere portate a termine; senza dubbio risulterebbe comodo avere un programma che le eseguisse per conto nostro. Potremmo indicare la lista dei rivenditori on line da consultare ed il programma ci individua il minor prezzo praticato. Volendo si potrebbe anche pensare di ordinare il libro direttamente tramite il programma.

Per rendere concreto questo scenario possiamo utilizzare SOAP.

SOAP e servizi Web

Il Simple Object Access Protocol (SOAP) è un protocollo basato su XML che consente a due applicazioni di comunicare tra loro sul Web. Pubblicato come Working Draft dal W3C nel dicembre 2001 (www.w3.org/TR/soap12-part0, www.w3.org/TR/soap12-part1, www.w3.org/TR/soap12-part2), SOAP definisce il formato dei messaggi che due applicazioni possono scambiarsi utilizzando i protocolli Internet, come ad esempio HTTP, per fornire dati e richiedere elaborazioni. Il protocollo è indipendente dalla piattaforma hardware e software ed è indipendente dal linguaggio di programmazione utilizzato per sviluppare le applicazioni comunicanti.

Grazie a questo protocollo, il concetto di Web come piattaforma per la pubblicazione di documenti contenenti informazioni fruibili da esseri umani cambia radicalmente. È possibile affiancare alla pubblicazione classica delle pagine Web una pubblicazione delle informazioni destinate alle applicazioni. Questo nuovo tipo di pubblicazione costituisce i cosiddetti servizi Web. Un servizio Web è un'applicazione che fornisce funzionalità tramite il Web in maniera indipendente dalla piattaforma utilizzata. I meccanismi che consentono questa indipendenza sono XML e HTTP.

Messaggi SOAP

Abbiamo detto SOAP è basato su XML. In effetti, un messaggio SOAP non è altro che un documento XML che descrive una richiesta di elaborazione o il risultato di una elaborazione. In particolare, un messaggio SOAP è costituito dai seguenti elementi:

  • Envelope

    Rappresenta il contenitore del messaggio e costituisce l'elemento root del documento XML

  • Header

    È un elemento opzionale che contiene informazioni globali sul messaggio; ad esempio, nell'header potrebbe essere specificata la lingua di riferimento del messaggio, la data dell'invio, ecc.

  • Body

    Rappresenta la richiesta di elaborazione o la risposta derivata da una elaborazione

  • Fault

    Se presente, fornisce informazioni sugli errori che si sono verificati durante l'elaborazione; questo elemento può essere presente soltanto nei messaggi di risposta

È opportuno evidenziare che SOAP definisce soltanto la struttura dei messaggi non il loro contenuto. I tag per descrivere una richiesta di elaborazione o un risultato vengono definiti in uno schema specifico ed utilizzati all'interno della struttura SOAP sfruttando il meccanismo dei namespace.

Un semplice esempio

Facciamo un semplice esempio per fissare le idee. Riferendoci allo scenario esposto all'inizio di questo articolo, vediamo come può essere il messaggio SOAP che richiede il prezzo di un determinato libro:

<soap:Envelope
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"
 soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding">

<soap:Body xmlns:mybook="http://www.books.com/soapbook">
  <mybook:GetBookPrice>
    <mybook:ISBN>12-3456-789-0</mybook:ISBN>
  </mybook:GetBookPrice>
</soap:Body>

</soap:Envelope>

L'elemento Envelope prevede un riferimento al namespace http://schemas.xmlsoap.org/soap/envelope che definisce il prefisso soap: come elemento che contraddistingue i tag e gli attributi stabiliti dal protocollo.

Il Body del messaggio contiene la descrizione della richiesta del prezzo di un libro. I tag XML utilizzati per questa descrizione fanno riferimento al namespace http://www.books.com/soapbook identificato dal prefisso mybook. In particolare, possiamo vedere la richiesta come una chiamata alla funzione GetBookPrice con il codice ISBN del libro come parametro.

A questa richiesta il servizio Web pubblicato sul sito del rivenditore potrebbe rispondere con un messaggio di questo tipo:

<soap:Envelope
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"
 soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding">

<soap:Body xmlns:mybook="http://www.books.com/soapbook">
  <mybook:GetBookPriceResponse>
    <mybook:Price>42.10</mybook:Price>
  </myboo:GetBookPriceResponse>
</soap:Body>

</soap:Envelope>

Anche in questo caso la risposta viene descritta facendo uso di tag personalizzati definiti dallo stesso namespace della richiesta.

Nel caso in cui si fosse verificato un errore nell'elaborazione della richiesta, un ipotetico messaggio d'errore avrebbe la seguente forma:

<soap:Envelope
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"
 soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding">

<soap:Body>
  <soap:Fault>
    <faultcode>Client</faultcode>
    <faultstring>Invalid Request</faultstring>
  </soap:Fault>
</soap:Body>

</soap:Envelope>

In questo caso l'elemento Fault descrive il tipo di errore che si è verificato facendo uso di tag predefiniti. In particolare, il tag <faultcode> indica una particolare codifica d'errore, mentre il tag <faultstring> fornisce una descrizione dell'errore. Nel caso specifico, il client ha inviato una richiesta non corretta.

Futuro o presente?

Lo scenario descritto all'inizio di questo articolo può sembrare futuribile. In realtà, l'uso di SOAP come protocollo per lo scambio di informazioni tra applicazioni sul Web è ormai un dato di fatto. Il protocollo è supportato dai principali produttori software (IBM, Sun, Microsoft, ecc.) ed esistono pacchetti per lo sviluppo di servizi Web sulla maggior parte delle piattaforme.

Non mancano i servizi Web accessibili tramite SOAP; basta dare uno sguardo al sito www.webservices.org per rendersene conto. Tra gli altri servizi Web ha fatto notizia la recente pubblicazione delle API di Google (http://www.google.com/apis), un insieme di funzioni di interrogazione del noto motore di ricerca invocabili tramite SOAP da una qualsiasi applicazione.

In futuro, quindi, (o già nel presente?) potremo crearci delle applicazioni che navigano per noi sul Web, elaborano i dati recuperati secondo i criteri da noi specificati e ci restituiscono i risultati, consentendoci di risparmiare tempo da impiegare in attività - si spera - più piacevoli.

Andrea Chiarelli (a.chiarelli@manthys.it) si occupa di progettazione e sviluppo di applicazioni Web e di formazione professionale presso Manthys (www.manthys.it), società di formazione e consulenza informatica di cui è titolare. Collabora con diverse riviste di settore sia italiane (Computer Programming, Dev, Visual Basic Journal) che straniere (ASPToday) ed è autore di testi su JavaScript e ASP.

Ti consigliamo anche