Post on 01-May-2015
Web Services
Definizione di Web Service
“Un servizio web è un'interfaccia che descrive una collezione di operazioni, accessibili attraverso una rete mediante messaggistica XML [WSCA10].”
“Per Web Service si intende un servizio riutilizzabile che può essere richiamato attraverso tecnologie Internet (come HTTP, FTP o IMAP) e che dialoga in XML.”
Vantaggi dei Web Services
• accoppiamento debole (“loosely coupled”)
– disaccoppiamento tra client e server
– non servono tecnologie specifiche di interfaccia con la rete (e.g. CORBA, DCOM) sul lato client o server
• “platform neutral”
– interoperabilità tra client e server indipendente dalle piattaforme
• interoperabili attraverso Internet
– basati su SOAP, HTTP e XML
• descrivibili mediante XML
– WSDL
UtilitàI Web Services possono essere utilizzati: nelle applicazioni B2B per interfacciare
diversi partner commerciali, nelle applicazioni B2C per fornire servizi
all'utente finale.
Es: un servizio che fornisce le quotazioni di
borsa un servizio di traduzione da una lingua ad
un'altra
Struttura dei Web ServicesSi possono distinguere varie componenti:
(Universal Definition and Discovery Interface) registro che permette la pubblicazione e la successiva ricerca dei servizi.(Web Services Definition Language) strumento per la definizione dei servizi, definiscono le interfacce e le modalità di colloquio.(Simple Object Access Protocol) protocollo a basso livello per la comunicazione di messaggi XML
Protocolli di trasporto nativi di Internet (http, ftp, altro)
Tipologie di interazione con i servizi
Le tipologie di interazione che possono essere descritte da WSDL sono molteplici:
ONE-WAY – il client invia semplicemente al servizio un messaggio, è una sorta di notifica.
REQUEST-RESPONSE – a una richiesta del client il server fornisce una risposta.
SOLICIT-RESPONSE – il servizio esegue una notifica al client e quest’ultimo gli invia un messaggio di risposta.
NOTIFICATION – prevede l’invio di messaggi dal servizio al client senza risposta da parte di quest’ultimo.
WSDL: Web Services Description Language
WSDL è un formato XML per la descrizione di servizi di rete.
Le specifiche di WSDL definiscono la struttura di un
documento XML che contiene:
le definizioni dei messaggi di input/output di un determinato servizio le relazioni tra questi, ovvero le operazioni che si possono compiere il collegamento fisico ad un determinato “end-point” che costituisce il punto di fornitura fisico del servizio web.
<wsdl:definitions targetNamespace="http://localhost:8080/axis/CiaoATutti.jws"><!-- WSDL created by Apache Axis version: 1.2beta
Built on Jun 23, 2004 (05:03:42 CEST) -->
<wsdl:message name="ciaoRequest"></wsdl:message>
<wsdl:message name="ciaoResponse">
<wsdl:part name="ciaoReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="CiaoATutti">
<wsdl:operation name="ciao">
<wsdl:input message="impl:ciaoRequest" name="ciaoRequest"/>
<wsdl:output message="impl:ciaoResponse" name="ciaoResponse"/>
</wsdl:operation>
</wsdl:portType>
Esempio di WSDL (1)
contiene la struttura dei messaggi di scambio del servizio
Definisce le operazioni esposte, per ogni funzione è definito il messaggio di input ed output
Esempio di WSDL (2)<wsdl:binding name=“CiaoMondoSoapBinding" type="impl:CiaoMondo">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="ciao"><wsdlsoap:operation soapAction=""/>
<wsdl:input name="ciaoRequest"><wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="ciaoResponse"><wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/CiaoMondo.jws" use="encoded"/>
</wsdl:output></wsdl:operation>
</wsdl:binding>
<wsdl:service name="CiaoMondoService"><wsdl:port binding="impl:CiaoMondoSoapBinding" name="CiaoMondo">
<wsdlsoap:address location="http://localhost:8080/axis/CiaoMondo.jws"/>
</wsdl:port></wsdl:service>
</wsdl:definitions>
contiene il collegamento tra il portType e l’end-point fisico in termini di protocollo di comunicazione, ad esempio SOAP
contiene la definizione del servizio in termini della sua descrizione e della posizione fisica
SOAP: Simple Object Access Protocol
SOAP è un protocollo leggero per lo scambio di informazioni in un ambiente distribuito e decentrato.
Le specifiche di SOAP descrivono principalmente la struttura dei documenti XML utilizzati per lo scambio di informazioni.
Le specifiche SOAP, inizialmente proposte da Microsoft, sono state condivise da IBM e sottoposte al W3C per la standardizzazione.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv = http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body> <ciaoResponse
soapenv:encodingStyle="http://...<ciaoReturn xsi:type="xsd:string">
Ciao a tutti</ciaoReturn>
</ciaoResponse> </soapenv:Body>
</soapenv:Envelope>
Esempio di risposta SOAP
SOAP:Envelope, è la “busta” che contiene tutte le informazioni.
SOAP:Body – contiene il messaggio vero e proprio espresso in qualche tipo di codifica, per esempio l’encoding SOAP
Cosa è necessario…Per implementare un webservice ed utilizzarlo sono necessari i seguenti componenti:
Lato server:
Application Web Server – Apache TomcatSOAP Engine – Apache Axis
Lato Client:
BrowserJAX-RPC Client
Apache AxisAxis è un SOAP engine
E’ un framework con cui costruire dei processori SOAP sia lato server che client
La versione 1.1 è una stabile ed affidabile base su cui implementare dei Java Web Services
Può essere usato come server stand-alone o come plug-in per servlet engine
Apache AxisLe specifiche JAX-RPC sono la base su cui sono sviluppati i client che usano Axis
L’endpoint è un URL che punta ad un server che processa messaggi SOAP
Ci sono due modi per usare JAX-RPC per collegarsi ad un endpoint SOAP:
Usare java.xml per comporre a mano il messaggio SOAP
Usare Axis per creare una classe wrapper per il web service
Schema Globale
Un esempio di WSDLnome del servizio
punto di contatto
formato input
formato output
nome della funzione
specifica della funzione
Un esempio di messaggiorichiesta di un servizio via HTTP
POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "http://example.org/2001/06/quotes"
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" > <env:Body> <m:GetLastTradePrice env:encodingStyle="http://www.w3.org/2001/06/soap-encoding" xmlns:m="http://example.org/2001/06/quotes"> <symbol>DIS</symbol> </m:GetLastTradePrice> </env:Body> </env:Envelope>
SOAP Envelope
SOAP Body
nome del servizio
parametri in input
HTTP Header
Un esempio di messaggiorisposta da un servizio via HTTP
HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: nnnn
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" > <env:Body> <m:GetLastTradePriceResponse env:encodingStyle="http://www.w3.org/2001/06/soap-encoding" xmlns:m="http://example.org/2001/06/quotes"> <Price>34.5</Price> </m:GetLastTradePriceResponse> </env:Body></env:Envelope>
SOAP Envelope
SOAP Body
risposta del servizio
output del servizio
HTTP Header