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: Es: 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 Services Si 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.
Esempio di WSDL (1) <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: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> 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) contiene il collegamento tra il portType e l’end-point fisico in termini di protocollo di comunicazione, ad esempio SOAP <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 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.
Esempio di risposta SOAP <?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> 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 Tomcat SOAP Engine – Apache Axis Lato Client: Browser JAX-RPC Client
Apache Axis Axis è 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 Axis Le 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 WSDL nome del servizio punto di contatto formato input formato output nome della funzione specifica della funzione
Un esempio di messaggio HTTP Header richiesta 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
Un esempio di messaggio HTTP Header risposta da un servizio via HTTP SOAP Envelope 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 Body risposta del servizio output del servizio