[ITA] Introduzione ai web services: SOAP, WSDL, UDDI

53
Politecnico di Milano Polo regionale di Como Introduzione ai Web Introduzione ai Web Services: SOAP, WSDL, UDDI Services: SOAP, WSDL, UDDI Marco Brambilla - http://home.dei.polimi.it/mbrambil Marco Brambilla - http://home.dei.polimi.it/mbrambil http:// home.dei.polimi.it/ mbrambil http://twitter.com/MarcoBrambi http:// www.slideshare.net/ mbrambil

description

Lezione introduttiva sui web services (in italiano): cosa sono, a cosa servono e standard base: SOAP, WSDL, UDDI,

Transcript of [ITA] Introduzione ai web services: SOAP, WSDL, UDDI

Politecnico di MilanoPolo regionale di

Como

Introduzione ai Web Services: Introduzione ai Web Services: SOAP, WSDL, UDDISOAP, WSDL, UDDI

Marco Brambilla - http://home.dei.polimi.it/mbrambilMarco Brambilla - http://home.dei.polimi.it/mbrambil

http://home.dei.polimi.it/mbrambil http://twitter.com/MarcoBrambi

http://www.slideshare.net/mbrambil

Web ServicesWeb Services

Sommario

Obiettivo della lezioneObiettivo della lezione

Cosa sono i Web serviceCosa sono i Web service

Le specifiche su cui si basano:Le specifiche su cui si basano:

• SOAP

• WSDL

• UDDI

Web ServicesWeb Services

Obiettivi della lezione

Introdurre i Web serviceIntrodurre i Web service

Descrivere le loro caratteristiche e Descrivere le loro caratteristiche e scenari applicativiscenari applicativi

Definire le tecnologie su cui si basanoDefinire le tecnologie su cui si basano

Nella prossima lezione: introdurre il Nella prossima lezione: introdurre il concetto di coreografiaconcetto di coreografia

Web ServicesWeb Services

Motivazioni

Esigenze della costruzione di applicazioni Esigenze della costruzione di applicazioni enterprise (Enterprise Application Integration):enterprise (Enterprise Application Integration):• Integrare nuove applicazioni e sistemi pre-

esistenti,spesso progettati con tecnologie pre-Web

• Integrare applicazioni Internet, extranet ed intranet, con un protocollo di trasporto facilmente implementabile e compatibile con le regole di sicurezza (VPN, firewall)

• Pubblicare in modo esplicito i servizi offerti dalle applicazioni esistenti, per favorirne il riuso da parte di altre applicazioni

Web ServicesWeb Services

Requisiti per la soluzione

Un protocollo di trasporto che consenta la Un protocollo di trasporto che consenta la comunicazione mediante HTTPcomunicazione mediante HTTP

Interoperabilità mediante scambio di messaggiInteroperabilità mediante scambio di messaggi

Formattazione dei messaggi tramite XMLFormattazione dei messaggi tramite XML

Pubblicazione dei servizi mediante un registro Pubblicazione dei servizi mediante un registro pubblico basato su XMLpubblico basato su XML

TOTALE INDIPENDENZA DALLE TOTALE INDIPENDENZA DALLE TECNOLOGIE DI SVILUPPO DEI SINGOLI TECNOLOGIE DI SVILUPPO DEI SINGOLI SERVIZI E DALLE INFRASTRUTTURE DI RETESERVIZI E DALLE INFRASTRUTTURE DI RETE

Web ServicesWeb Services

Web Service: definizione W3C Definition: [A Web service is a software system W3C Definition: [A Web service is a software system

designed to support interoperable machine-to-machine designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed systems interact with the Web service in a manner prescribed by its description using SOAP messages]by its description using SOAP messages]

Un Web service è un componente software:Un Web service è un componente software:• Accessibile mediante un protocollo denominato SOAP (Simple

Object Access Protocol), facilmente implementabile sopra HTTP• La cui interfaccia è descritta da un documento XML che segue il

formato WSDL (Web Service Description Language)

I Web service si basano sulle specifiche XML, SOAP, WSDL, I Web service si basano sulle specifiche XML, SOAP, WSDL, UDDI. Questi sono i pilastri per l'integrazione ed UDDI. Questi sono i pilastri per l'integrazione ed aggregazione di applicazioniaggregazione di applicazioni

Web ServicesWeb Services

Architetture a servizi vs 3 tier

Web ServicesWeb Services

Ciclo di vita di un servizio

3

2

1

PRODUTTORE

CONSUMATORE REGISTRO

CHIAMA

CERCA

PUBBLICA

Web ServicesWeb Services

Web Service Stack L’architettura dei Web Services è definita su sei L’architettura dei Web Services è definita su sei

livelli (layers) di tecnologie e standardlivelli (layers) di tecnologie e standard

Service Integration

Service Discovery

Service Publication

Service Description

XML-based Messaging

Transport

BPEL4WS IBM, Microsoft& BEAWCSI SunBPML BPMI.org WSFL IBMXLANG MicrosoftebBPSS ebXML.org

UDDI UDDI.orgebXML ebXML.org

UDDI UDDI.orgebXML ebXML.org

WSDL W3C

XMLP W3CSOAP W3CXML W3C

HTTPR IBMHTTP W3C

Web ServicesWeb Services

SOAP: Simple Object Access Protocol (v. 1.2)

Protocollo di scambio di informazioni in formato XML tra Protocollo di scambio di informazioni in formato XML tra attori qualsiasiattori qualsiasi

Definisce un formato generico di messaggio XMLDefinisce un formato generico di messaggio XML E’ un paradigma di scambio stateless e one-wayE’ un paradigma di scambio stateless e one-way Pattern di interazione più complessi (es. Richiesta/risposta, Pattern di interazione più complessi (es. Richiesta/risposta,

…) devono essere definiti a livello applicativo…) devono essere definiti a livello applicativo Specifica le azioni che gli attori della conversazione (i SOAP Specifica le azioni che gli attori della conversazione (i SOAP

processors) devono svolgere al momento della ricezione dei processors) devono svolgere al momento della ricezione dei messaggimessaggi

Non descriveNon descrive• La semantica dei dati trasportati,

• L’implementazione della comunicazione

• La qualità del trasporto (affidabilità, routing)

Web ServicesWeb Services

SOAP: scenario e componenti

SOAP prevede un SOAP prevede un processing modelprocessing model distribuito: distribuito:• un un SOAP messageSOAP message

• viene inviato da un viene inviato da un SOAP senderSOAP sender

• è diretto ad un è diretto ad un SOAP receiverSOAP receiver finale finale

• attraverso zero o più attraverso zero o più SOAP intermediariesSOAP intermediaries

Il SOAP processing model specifica in che modo Il SOAP processing model specifica in che modo un SOAP receiver processa un SOAP message. un SOAP receiver processa un SOAP message. • Si applica ad un singolo messaggio, isolato da tutti gli Si applica ad un singolo messaggio, isolato da tutti gli

altrialtri

Web ServicesWeb Services

SOAP: scenario e componenti

Nel processare i SOAP message, un nodo Nel processare i SOAP message, un nodo SOAP agisce in uno o più SOAP agisce in uno o più SOAP rolesSOAP roles

Ciascun role è identificato da un URI Ciascun role è identificato da un URI chiamato chiamato SOAP role nameSOAP role name

I ruoli assunti da un nodo non possono I ruoli assunti da un nodo non possono variare nell'atto di processare un messaggiovariare nell'atto di processare un messaggio

Web ServicesWeb Services

Formato dei messaggi SOAPEnvelope: il contenitore delle

diverse parti delmessaggio

Body (obbligatorio): parte centrale del messaggio

Header (opzionale): informazioni addizionali al messaggio, divise in blocchi, per i diversi attori coinvolti

I contenuti di ogni parte NON sono specificati in SOAP

SOAP Envelope

SOAP Header (opzionale)

SOAP Body (obbligatorio)

Header Block 1

…………

Header Block N

Web ServicesWeb Services

Esempio di messaggio SOAP<?xml version=’1.0’ ?><env:Envelope xmlns:env=”http://www.w3.org/2001/12/soap-envelope”> <env:Header>  <m:reservation xmlns:m=”http://webml.org/reservation”> <m:reference>abl:0932 </reference> <m:dateAndTime>2001-11-29 13:35:00</m:dateAndTime> </m:reservation> <n:passenger xmlns:n=”http://webml.org/employees”> <n:name>John Smith</n:name>  </n:passenger> </env:Header>

 <env:Body> <p:itinerary xmlns:p=”http://webml.org/reservation/travel”> <p:airportChoices> JFK LGA EWR </p:airportChoices> </p:itinerary> </env:Body></env:Envelope>

Web ServicesWeb Services

L’uso dei namespace nei messaggi SOAP

Poichè in XML i nomi degli elementi non sono fissati a Poichè in XML i nomi degli elementi non sono fissati a priori è spesso possibile che si verifichino conflitti priori è spesso possibile che si verifichino conflitti quando due documenti usano lo stesso nome per quando due documenti usano lo stesso nome per descrivere due diversi tipi di elementidescrivere due diversi tipi di elementi

XHTML:<table> <tr> <td>Apples</td> <td>Bananas</td> </tr></table>

Mobilio:<table> <name>African Coffee Table </name> <width>80</width> <length>120</length></table>

Web ServicesWeb Services

I namespace sono dei semplici prefissi usati per evitare conflitti tra I namespace sono dei semplici prefissi usati per evitare conflitti tra elementi con lo stesso nomeelementi con lo stesso nome

La sintassi:La sintassi: xmlns:namespace-prefix="namespace"<f:table xmlns:f="http://www.w3schools.com/furniture">

<f:name>African Coffee Table</f:name>

<f:width>80</f:width>

<f:length>120</f:length>

</f:table>

L'attributo xmlns associa al prefisso "f" un qualified name (un URI)L'attributo xmlns associa al prefisso "f" un qualified name (un URI)

Nota: viene usato un URI semplicemente per dare al namespace Nota: viene usato un URI semplicemente per dare al namespace un identificativo unico, non viene usato dal parser per recuperare un identificativo unico, non viene usato dal parser per recuperare informazioniinformazioni

L’uso dei namespace nei messaggi SOAP

Web ServicesWeb Services

I namespace usati nello standard (SOAP 1.2)

xmlns:env=http://www.w3.org/2003/05/soap-envelopexmlns:env=http://www.w3.org/2003/05/soap-envelope

xmlns:rpc=http://www.w3.org/2003/05/soap-rpcxmlns:rpc=http://www.w3.org/2003/05/soap-rpc

xmlns:SOAP-ENC = xmlns:SOAP-ENC = http://schemas.xmlsoap.org/soap/encoding/http://schemas.xmlsoap.org/soap/encoding/

xmlns:xsd=http://www.w3.org/1999/XMLSchemaxmlns:xsd=http://www.w3.org/1999/XMLSchema

xmlns:xsi="http://www.w3.org/1999/XMLSchema-xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"instance"

Web ServicesWeb Services

SOAP processing model (1) Descrive le azioni che un SOAP processor deve svolgere alla Descrive le azioni che un SOAP processor deve svolgere alla

ricezione di un messaggio SOAPricezione di un messaggio SOAP

Il processor deve saper riconoscere le parti di messaggio Il processor deve saper riconoscere le parti di messaggio specifiche di SOAP (“env” namespace: envelope, header, body, specifiche di SOAP (“env” namespace: envelope, header, body, header blocks)header blocks)

Un header block può contenere un attributo role (actor in SOAP Un header block può contenere un attributo role (actor in SOAP 1.1) che specifica il ruolo del destinatario di quel blocco. Ruoli 1.1) che specifica il ruolo del destinatario di quel blocco. Ruoli standard sono:standard sono:• next: ("http://www.w3.org/2003/05/soap-envelope/role/next"): il ruolo che

deve essere assunto da tutti gli intermediari e dal nodo ficevente finale. .

• none: ("http://www.w3.org/2003/05/soap-envelope/role/none"): denota che un header block NON è destinato ad alcun nodo SOAP

• ultimateReceiver: ("http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver“): il ruolo che deve essere ricoperto dall’utimo ricevente

Web ServicesWeb Services

SOAP processing model(2) Un Header block può contenere l’attributo Un Header block può contenere l’attributo mustUnderstandmustUnderstand: :

dice se altre azioni devono essere svolte oltre al corretto dice se altre azioni devono essere svolte oltre al corretto riconoscimento del blocco da parte dell’attorericonoscimento del blocco da parte dell’attore

mustUnderstandmustUnderstand = “true”: il SOAP processor destinatario deve = “true”: il SOAP processor destinatario deve processare il blocco, comprendendone la semantica processare il blocco, comprendendone la semantica svolgendo eventualmente azioni specifiche (es., rimuovere svolgendo eventualmente azioni specifiche (es., rimuovere l’header, modificare l’header, …); se non è in grado di farlo l’header, modificare l’header, …); se non è in grado di farlo deve generare un errore(fault). deve generare un errore(fault).

Scopo: esser certi che un SOAP processor non ignori mai dei Scopo: esser certi che un SOAP processor non ignori mai dei blocchi significativiblocchi significativi

L’elemento L’elemento BodyBody non ha attributo non ha attributo mustUnderstandmustUnderstand

Generalmente un SOAP processor genera SOAP fault o Generalmente un SOAP processor genera SOAP fault o nuovi SOAP messages che verranno consumati da altri nuovi SOAP messages che verranno consumati da altri processorsprocessors

Web ServicesWeb Services

Stili di scambio messaggi Document styleDocument style: si adotta quando i servizi richiedono di : si adotta quando i servizi richiedono di

scabiarsi veri e propri documenti/dati XML scabiarsi veri e propri documenti/dati XML • Il Body contiene il contenuto informativo del messaggio formattato in XML

• Il documento scambiato può avere struttura e contenuti qualunque, non definiti a priori

RPC styleRPC style: si adotta quando chiamata si vuole invocare una : si adotta quando chiamata si vuole invocare una procedura remotaprocedura remota• Utilizza una struttura del corpo del messaggio convenzionale che

rappresenta le informazioni necessarie per una RPC: nome della procedura o metodo, segnatura (opzionale), parametri

• La risposta della RPC (cioè il valore di ritorno della chiamata) è restituita nel Body di un altro messaggio SOAP, secondo il meccanismo richiesta-risposta (p.e: la chiamata è inviata mediante request HTTP e la risposta fornita come respons HTTP)

Web ServicesWeb Services

RPC vs Document

RPC:RPC:• Realizza un’invocazione di procedura

• Basata sulla segnatura della procedura

• Sincrona

• Effettua il marshalling/unmarshalling dei parametri da/verso XML

DocumentDocument• Sia sincrona che asincrona

• Basata sui contenuti del documento

• Usata quando si devono scambiare dati semistrutturati e di una certa dimensione

Web ServicesWeb Services

Esempio RPC SOAP Supponiamo di dover chiamare una procedura del tipo:Supponiamo di dover chiamare una procedura del tipo:

• double GetStockQuote ( [in] string sSymbol );

La La chiamatachiamata si rappresenta in SOAP con un messaggio si rappresenta in SOAP con un messaggio dalla struttura convenzionale:dalla struttura convenzionale:

<q:GetStockQuote xmlns:q="http://www.wroxstox.com/">

   <q:sSymbol xsi:type="xsd:string">OU812</q:sSymbol>

</q:GetStockQuote>

La convenzione di chiamata stabilisce una La convenzione di chiamata stabilisce una corrispondenza tra nome della procedura e dei parametri corrispondenza tra nome della procedura e dei parametri in ingresso e nomi degli elementi da usarsi nel in ingresso e nomi degli elementi da usarsi nel messaggio SOAPmessaggio SOAP

Web ServicesWeb Services

Risposta a chiamata RPC SOAP

Esempio:Esempio: • string ReverseString ( [in] string s );

Rappresentazione convenzionale della risposta:Rappresentazione convenzionale della risposta:<x:ReverseStringResponse xmlns:x="http://www.wrox.com/">   <x:ret xsi:type="xsd:string">THOR</x:ret></x:ReverseString>

NB: si possono rappresentare in modo simile NB: si possono rappresentare in modo simile anche risposte a chiamate di procedura con anche risposte a chiamate di procedura con parametri OUT e INOUTparametri OUT e INOUT

Web ServicesWeb Services

Gestione errori: SOAP fault SOAP fornisce un modello per gestire situazioni di SOAP fornisce un modello per gestire situazioni di

errore nella elaborazione di un messaggioerrore nella elaborazione di un messaggio

L’elemento Body ha un sottoelemento particolare L’elemento Body ha un sottoelemento particolare (Fault) in cui specificare le informazioni sull’errore (Fault) in cui specificare le informazioni sull’errore verificatosiverificatosi

L’elemento L’elemento FaultFault, nel Body, contiene:, nel Body, contiene:Faultcode: sub-elemento standardFaultstring: sub-elemento standardDetails (opzionale): informazioni applicative specificheFaultactor (opzionale): identifica il SOAP processor che ha generato l’errore

Web ServicesWeb Services

SOAP Binding I messaggi SOAP possono essere scambiati usando diversi I messaggi SOAP possono essere scambiati usando diversi

protocolli. La specifica di come i messaggi sono passati da protocolli. La specifica di come i messaggi sono passati da un nodo ad un altro usando un protocollo prende il nome di un nodo ad un altro usando un protocollo prende il nome di SOAP bindingSOAP binding

I due binding più diffusi di SOAP usano HTTP o SMTP, ma I due binding più diffusi di SOAP usano HTTP o SMTP, ma si possono prevedere anche altri vettori (socket, messaggi si possono prevedere anche altri vettori (socket, messaggi MQseries, ecc..)MQseries, ecc..)

Uso tipico di HTTPUso tipico di HTTP• RPC: POST request con il messaggio contenente i dati di

invocazione, POST response contenente il valore di ritorno

• Document: POST request con il documento inviato ed endpoint URL a cui inviare il documento di risposta

Web ServicesWeb Services

SOAP Encoding L’invio di un messaggio può richiedere la codifica dei L’invio di un messaggio può richiedere la codifica dei

parametri attesi dal riceventeparametri attesi dal ricevente Sorge il problema di come rappresentare in XML valori di Sorge il problema di come rappresentare in XML valori di

tipi complessi (p.e.: array, record, ecc..)tipi complessi (p.e.: array, record, ecc..) Lo stile di codifica viene dichiarato usando l’attributo Lo stile di codifica viene dichiarato usando l’attributo

encodingStyle, che può qualificare qualunque elemento di encodingStyle, che può qualificare qualunque elemento di un messaggio (ma che solitamente si mette nella SOAP un messaggio (ma che solitamente si mette nella SOAP envelope)envelope)

SOAP fornisce uno stile di encoding SOAP fornisce uno stile di encoding (http://schemas.xmlsoap.org/soap/encoding/) che usa XML (http://schemas.xmlsoap.org/soap/encoding/) che usa XML schema per la rappresentazione dei valori serializzatischema per la rappresentazione dei valori serializzati

SOAP encoding tratta tipi di dati semplici, enumerativi, dati SOAP encoding tratta tipi di dati semplici, enumerativi, dati binari, tipi composti (structs, array), riferimenti, ecc..binari, tipi composti (structs, array), riferimenti, ecc..

Web ServicesWeb Services

SOAP + HTTP

E’ il binding più usatoE’ il binding più usato Sfrutta il metodo POST e le entity HTTP come vettori Sfrutta il metodo POST e le entity HTTP come vettori

del messaggio SOAPdel messaggio SOAP Sfrutta HTTP URL per identificare il processore Sfrutta HTTP URL per identificare il processore

destinatario del messaggiodestinatario del messaggio La request utilizza uno header speciale (SOAPAction) La request utilizza uno header speciale (SOAPAction)

che indica informazione opzionale sul motivo della che indica informazione opzionale sul motivo della request HTTP utilizzabile dai proxy oppure dal request HTTP utilizzabile dai proxy oppure dal riceventericevente

La response usa gli error code HTTP, abbinati al fault La response usa gli error code HTTP, abbinati al fault header di SOAPheader di SOAP

Web ServicesWeb Services

Esempio SOAP+HTTP requestPOST /endpoint.asp HTTP/1.1Content-Type: text/xmlContent-Length: ###SOAPAction: "urn:wroxheroes"<soap:Envelope

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"               soap:encodingStyle="http://schemas.xmlsoap.org/soap                                   /encoding/">   <soap:Header>      <h:from xmlns:h="http://www.wrox.com/Header">         [email protected]      </h:from>   </soap:Header>   <soap:Body>      <w:GetSecretIdentity xmlns:w="http://www.wrox.com/heroes/">         <codename>XSLT-Man</codename>      </w:GetSecretIdentity>   </soap:Body></soap:Envelope>

Web ServicesWeb Services

Esempio: SOAP+HTTP responseHTTP/1.1 200 OKContent-Type: text/xmlContent-Length: ###<soap:Envelope

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"               soap:encodingStyle="http://schemas.xmlsoap.org/soap                                   /encoding/"               xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"               xmlns:xsd="http://www.w3.org/1999/XMLSchema">   <soap:Body>      <m:GetSecretIdentityResponse

xmlns:m="http://www.wrox.com/heroes/">         <return xsi:type="xsd:string">Michael Kay</return>      </m:GetSecretIdentityResponse>   </soap:Body></soap:Envelope>

Web ServicesWeb Services

Esempio: SOAP+HTTP response con errore

HTTP/1.1 500 Internal Server ErrorContent-Type: text/xmlContent-Length: ###<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"               soap:encodingStyle="http://schemas.xmlsoap.org/soap                                   /encoding/"               xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"               xmlns:xsd="http://www.w3.org/1999/XMLSchema">   <soap:Body>      <soap:Fault>         <faultcode>soap:VersionMismatch</faultcode>            <faultstring>The SOAP namespace is incorrect.</faultstring>         <faultactor>http://www.wrox.com/endpoint.asp</faultactor>         <detail>            <w:errorinfo xmlns:w="http://www.wrox.com/">               <desc>The SOAP namespace was blank.</desc>            </w:errorinfo>         </detail>      </soap:Fault>   </soap:Body></soap:Envelope>

Web ServicesWeb Services

Descrizione dei servizi

Limiti di SOAP:Limiti di SOAP:• Nonostante il nome, SOAP non è veramante object-

oriented, ma solo message-oriented

• Non si può descrivere un servizio complesso, formato da diversi metodi

• Non si può descrivere la corrispondenza tra messaggi di richiesta e messaggi di risposta

• Non si può descrivere il tipo di dati che costituiscono la richiesta e la risposta

Web ServicesWeb Services

Web Service Description Language

DEFINIZIONE: WSDLDEFINIZIONE: WSDL è un linguaggio basato su è un linguaggio basato su XML per definire e descrivere Web servicesXML per definire e descrivere Web services

WSDLWSDL descrive un servizio fornendo le informazioni descrive un servizio fornendo le informazioni necessarie per sviluppare client che intendano necessarie per sviluppare client che intendano utilizzarlo seguendo la sintassi XMLutilizzarlo seguendo la sintassi XML

ContenutiContenuti: Un documento WSDL specifica la : Un documento WSDL specifica la locazione (URL) del servizio e le operazioni offerte, locazione (URL) del servizio e le operazioni offerte, mediante:mediante:• Una descrizione astratta di una classe di servizi• Un insieme di descrizioni di servizi concreti, conformi alla

descrizione astratta

Web ServicesWeb Services

Descrizione dei tipi

La parte astratta di un descrittore WSDL specifica:La parte astratta di un descrittore WSDL specifica:• Un insieme (opzionale) di TIPI (types): nuovi tipi XML

schema che potranno essere usati nella specifica

• Un insieme di MESSAGGI (messages): descrizioni astratte (tipi e nomi) dei dati scambiati con il Service (eventualmente usando i types sopra definiti)

• Un insieme di OPERAZIONI (operations): descrizioni astratte delle azioni supportate da un Service

• Uno o più PORT TYPE: insiemi di operazioni correlate dal punto di vista applicativo

Web ServicesWeb Services

Descrizione dell’implementazione

La parte concreta di un descrittore WSDL La parte concreta di un descrittore WSDL specifica:specifica:• Binding: il particolare protocollo di comunicazione per un

certo port type. E’ possibile specificare diversi binding per un lo stesso port type (es. su HTTP, SMTP ecc.)

• Port: modulo concreto costituito da:un port type [interfaccia e specifica del servizio]un binding [come funziona il servizio]un indirizzo di rete (URL) [dove trovare il servizio]

• Service: fornitore di servizi concreto formato da un insieme di port

Web ServicesWeb Services

Struttura di un documento WSDL

<definitions> <types>

i tipi di dati che verranno trasmessi

</types>

<message>

i messaggi scambiati

</message>

<portType>

le operazioni (funzioni) supportate

</portType>

<binding>

come si scambiano i messaggi (dettagli SOAP)

</binding>

<service>

dove trovare il servizio

</service></definitions>

Web ServicesWeb Services

Tipi di operazioni WSDL

Un’operazione (Un’operazione (operationoperation) può essere: ) può essere:

one-wayone-way:il service riceve un messaggio (input :il service riceve un messaggio (input message)message)

request-responserequest-response: il service riceve una richiesta(input : il service riceve una richiesta(input message) e restituisce la risposta relativa(output message) e restituisce la risposta relativa(output message)message)

solicit-responsesolicit-response: il service invia un messaggio (output : il service invia un messaggio (output message) e riceve una risposta (input message)message) e riceve una risposta (input message)

notificationnotification: il servizio invia un messaggio (output : il servizio invia un messaggio (output message)message)

Web ServicesWeb Services

Asincronismo delle operazioni L’operation è l’unità di interazione elementare con un Web L’operation è l’unità di interazione elementare con un Web

service, ed è eseguita attraverso lo scambio di messaggi.service, ed è eseguita attraverso lo scambio di messaggi.

Convenzionalmente: Convenzionalmente:

• input messages: inviati dall’utilizzatore al Service

• output messages: messaggi inviati dal Service.

L’interazione con i Web Services può essere asincrona. Scambi L’interazione con i Web Services può essere asincrona. Scambi asincroni possono verificarsi all’interno di una operazione a due asincroni possono verificarsi all’interno di una operazione a due messaggi, oppure tra due operazioni a messaggio singolomessaggi, oppure tra due operazioni a messaggio singolo

Nel caso di operazioni binarie asincrone su protocolli sincroni Nel caso di operazioni binarie asincrone su protocolli sincroni (es: HTTP) l’implementazione deve occuparsi della correlazione (es: HTTP) l’implementazione deve occuparsi della correlazione dei messaggi: p.e. usando SOAP header di tipo “reply-to”dei messaggi: p.e. usando SOAP header di tipo “reply-to”

Web ServicesWeb Services

Esempio (parte 1)<message name=”getTranslationRequest”> <part name=”word” type=”xs:string”/></message><message name=”getTranslationResponse”> <part name=”value” type=”xs:string”/></message>

<portType name=”dictionaryService”> <operation name=”getTranslation”> <input message=”getTranslationRequest”/> <output message=”getTranslationResponse”/> </operation>

… altre operations...</portType>

Request-response operation

Web ServicesWeb Services

Esempio (parte 2) – SOAP binding

<binding type=”dictionaryService” name=”bind1”> <soap:binding style=”document” transport=”http://schemas.xmlsoap.org/soap/http” /> <operation> <soap:operation soapAction=”http://webml.org/getTransl”/> <input> <soap:body use=”literal”/> </input> <output> <soap:body use="encoded" namespace="urn:enc-name"

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation></binding>

Eventuale Tipo di encoding

rpc o document

riferimento al portType

SOAP su HTTP

Web ServicesWeb Services

Esempio (parte 3) - endpoint

<service name="dictService">

<port name="dictionaryService” binding="bind1">

<soap:address

location="http://www.dict.com/serv"/>

</port>

</service>

PortTypeBinding

End Point

Web ServicesWeb Services

WSDL: un esempio completo (1/2)<?xml version="1.0" ?> <definitions name="BabelFishService"

xmlns:tns="http://www.xmethods.net/sd/BabelFishService.wsdl" targetNamespace="http://www.xmethods.net/sd/BabelFishService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/">

- <message name="BabelFishRequest">  <part name="translationmode" type="xsd:string" />   <part name="sourcedata" type="xsd:string" />   </message>- <message name="BabelFishResponse">  <part name="return" type="xsd:string" />   </message>

- <portType name="BabelFishPortType">- <operation name="BabelFish">  <input message="tns:BabelFishRequest" />   <output message="tns:BabelFishResponse" />   </operation>  </portType>...

Web ServicesWeb Services

WSDL: un esempio completo (2/2)...- <binding name="BabelFishBinding" type="tns:BabelFishPortType">  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> - <operation name="BabelFish">  <soap:operation soapAction="urn:xmethodsBabelFish#BabelFish" /> - <input>  <soap:body use="encoded" namespace="urn:xmethodsBabelFish" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />   </input>- <output>  <soap:body use="encoded" namespace="urn:xmethodsBabelFish" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />   </output>  </operation>  </binding>

- <service name="BabelFishService">  <documentation>Translates text of up to 5k in length, between a variety of

languages.</documentation> - <port name="BabelFishPort" binding="tns:BabelFishBinding">  <soap:address location="http://services.xmethods.net:80/perl/soaplite.cgi" />   </port>  </service>  </definitions> (www.xmethods.com)

Web ServicesWeb Services

Uniform Description, Discovery and Integration

Scopo: implementare un catalogo (stile “pagine gialle”) Scopo: implementare un catalogo (stile “pagine gialle”) in cui è possibile registrare servizi, per permettere ai in cui è possibile registrare servizi, per permettere ai potenziali utilizzatori di localizzarlipotenziali utilizzatori di localizzarli

UDDI è una specifica ad alto livello di un sistema UDDI è una specifica ad alto livello di un sistema distribuito (ed eventualmente replicato) di distribuito (ed eventualmente replicato) di catalogazione di servizi descritti in WSDLcatalogazione di servizi descritti in WSDL

UDDI non è un servizio di ricerca completo e UDDI non è un servizio di ricerca completo e strutturatostrutturato

Un registro UDDI è esso stesso accessibile mediante Un registro UDDI è esso stesso accessibile mediante Web ServiceWeb Service

Web ServicesWeb Services

Le informazioni in UDDILe informazioni memorizzate da UDDI sono:Le informazioni memorizzate da UDDI sono: businessEntity:businessEntity: gli attori che pubblicano i servizi. Possono gli attori che pubblicano i servizi. Possono

anche contenere informazioni per classificare tali attori anche contenere informazioni per classificare tali attori (lozalizzazione, tipologia di attore e di servizi forniti, …)(lozalizzazione, tipologia di attore e di servizi forniti, …)

businessService:businessService: contenitore di una famiglia di servizi correlati contenitore di una famiglia di servizi correlati bindingTemplate:bindingTemplate: descrizione tecnica del servizio: ciò che è descrizione tecnica del servizio: ciò che è

necessario per connettersi e comunicare con il servizio (url del necessario per connettersi e comunicare con il servizio (url del servizio e uno o più riferimenti a service models) servizio e uno o più riferimenti a service models)

Il Il service modelservice model è una descrizione astratta del servizio, che è una descrizione astratta del servizio, che dice cosa fa, qual è la sintassi dei messaggi che accetta, ecc. dice cosa fa, qual è la sintassi dei messaggi che accetta, ecc. Non è descritto da UDDI, ma da altri standard Non è descritto da UDDI, ma da altri standard

Una businessEntity può pubblicare molti businessServices, Una businessEntity può pubblicare molti businessServices, ciascuno dei quali può avere più bindingTemplateciascuno dei quali può avere più bindingTemplate

Web ServicesWeb Services

Operazioni in UDDI

UDDI consente di:UDDI consente di:RegistrareRegistrare (una (una businessEntitybusinessEntity, contenente , contenente

businessServicesbusinessServices, ecc.); una chiave univoca viene , ecc.); una chiave univoca viene assegnata e la sottomissione è replicata su tutti i assegnata e la sottomissione è replicata su tutti i registri UDDI.registri UDDI.

CercareCercare, cioè effettuare interrogazioni sulle , cioè effettuare interrogazioni sulle descrizioni UDDI di servizi, secondo i criteri di ricerca descrizioni UDDI di servizi, secondo i criteri di ricerca specificati. Il risultato è l’insieme delle chiavi dei specificati. Il risultato è l’insieme delle chiavi dei servizi corrispondentiservizi corrispondenti

RecuperareRecuperare i dati di un preciso servizio/ entità/ i dati di un preciso servizio/ entità/ binding di cui è nota la chiave.binding di cui è nota la chiave.

Web ServicesWeb Services

UDDI implementations

Per garantire l’accesso ai registri UDDI da ogni Per garantire l’accesso ai registri UDDI da ogni piattaforma, le directory UDDI espongono un insieme di piattaforma, le directory UDDI espongono un insieme di API sotto forma di Web services basati su SOAP.API sotto forma di Web services basati su SOAP.

Attualmente i servizi UDDI sono forniti solo pochi Attualmente i servizi UDDI sono forniti solo pochi providers: providers:

• IBM

• Microsoft

• Xmethods

• SAP

Web ServicesWeb Services

UDDI Registries + client

http://uddi.ibm.com/http://uddi.ibm.com/ http://uddi.microsoft.com/http://uddi.microsoft.com/ http://uddi.sap.com/http://uddi.sap.com/ http://www.ntt.com/uddi/http://www.ntt.com/uddi/ Client: http://soapclient.comClient: http://soapclient.com

Web ServicesWeb Services

UDDI Queryfind_binding: Used to locate specific bindings within a registered businessService.  Returns a bindingDetail message.find_business: Used to locate information about one or more businesses.  Returns a businessList message. find_relatedBusinesses: Used to locate information about businessEntity registrations that are related to a specific business entity whose key is passed in the inquiry.  The Related Businesses feature is used to manage registration of business units and subsequently relate them based on organizational hierarchies or business partner relationships.  Returns a relatedBusinessesList message.find_service: Used to locate specific services within a registered businessEntity.  Returns a serviceList message.find_tModel: Used to locate one or more tModel (technical fingerprint of a particular software interface) information structures.  Returns a tModelList structure. get_bindingDetail: Used to get full bindingTemplate information suitable for making one or more service requests.  Returns a bindingDetail message. get_businessDetail: Used to get the full businessEntity information for one or more businesses or organizations.  Returns a businessDetail message. get_businessDetailExt: Used to get extended businessEntity information.  Returns a businessDetailExt message. get_serviceDetail: Used to get full details for a given set of registered businessService data.  Returns a serviceDetail message.get_tModelDetail: Used to get full details for a given set of registered tModel data.  Returns a tModelDetail message.

Web ServicesWeb Services

Esempio UDDI - request

<Envelope>

<Body>

<find_business generic="1.0" maxRows="100">

<findQualifiers/>

<name>google</name>

</find_business>

</Body>

</Envelope>

Web ServicesWeb Services

Esempio UDDI - response

<soap:Envelope><soap:Body>

<businessList generic="1.0" operator="Microsoft Corporation" truncated="false">

<businessInfos>

<businessInfo businessKey="824f69e0-6f23-11d7-b2e8-000629dc0a53">

<name>GoogleWebService</name>

<description xml:lang="en">service for Discovery base on Web services</description>

<serviceInfos/>

</businessInfo>

</businessInfos></businessList>

</soap:Body>

</soap:Envelope>

Web ServicesWeb Services

Riferimenti

SStandard (obbligatori)tandard (obbligatori)::• SOAP www.w3.org/TR/soap

• WSDL www.w3.org/TR/wsdl

• UDDI www.uddi.org/specification.html

SOAP: Henri Bequet “Professional Java SOAP” Cap. 2 SOAP: Henri Bequet “Professional Java SOAP” Cap. 2 http://www.perfectxml.com/SOAPIntro.asp#chaphttp://www.perfectxml.com/SOAPIntro.asp#chap

WSDL: Ethan Cerami “Web Service Essentials” Cap. 6 WSDL: Ethan Cerami “Web Service Essentials” Cap. 6 http://www.oreilly.com/catalog/webservess/chapter/ch0http://www.oreilly.com/catalog/webservess/chapter/ch06.html6.html

http://soapclient.comhttp://soapclient.com

Web ServicesWeb Services

Altre fonti

www.w3c.orgwww.w3c.org www.sun.comwww.sun.com http://otn.oracle.com/tech/webserviceshttp://otn.oracle.com/tech/webservices http://www.onjava.comhttp://www.onjava.com http://uddi.orghttp://uddi.org

Web ServicesWeb Services

Grazie

Per commenti potete scrivere a:Marco Brambilla

Politecnico di Milano

Dipartimento di Elettronica e Informazione

[email protected]

o accedere alla mia home page o twitter account:

http://home.dei.polimi.it/mbrambil

http://twitter.com/MarcoBrambi

http://home.dei.polimi.it/mbrambil http://twitter.com/MarcoBrambi

http://www.slideshare.net/mbrambil