Web Services Description Language: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
 
Esempio di documento WSDL 2.0: Migliorato la pagina
 
(71 versioni intermedie di 45 utenti non mostrate)
Riga 1:
Il '''Web Services Description Language''' ('''WSDL''') è un [[linguaggio formale]] in formato [[XML]] utilizzato per la creazione di "documenti" per la descrizione di [[Web service]].
{{stub}} {{da wikificare}} [[categoria:informatica]]
 
== Descrizione ==
Il Web Service Description Language (WSDL) è una disposizione di [[XML]] pubblicata per la descrizione dei [[Web Service]].
Mediante WSDL può essere infatti descritta l'[[Interfaccia (informatica)|interfaccia]] pubblica di un Web service (ovvero una descrizione basata su XML) che indica come interagire con un determinato servizio.
 
Un "documento" WSDL contiene infatti, relativamente al Web service descritto, informazioni su:
WSDL descrive l'interfaccia pubblica del Web Service tramite una descrizione in formato XML del servizio e di come comunicare con il servizio stesso; le specifiche del protocollo di trasporto e dei messaggi usati per interagire con il Web Service sono elencate nei relativi [[tag]].
I funzionamenti ed i messaggi sostenuti sono descritti abstractly ed allora limitano ad una disposizione concreta di protocollo di rete e del messaggio.
 
*''cosa'' può essere utilizzato (le "operazioni" messe a disposizione dal servizio)
WSDL è usato spesso insieme a [[XML Schema]] e a [[SOAP]], per pubblicare [[Web Services]] su [[Internet]].
*''come'' sfruttare tale raggruppamento (specificando il [[Protocollo di rete|protocollo]] di comunicazione da utilizzare per accedere al servizio, il formato dei messaggi accettati in [[Input/Output|input]] e restituiti in [[Input/Output|output]] dal servizio ed i [[dato|dati]] correlati) ovvero i "vincoli" ({{Inglese|bindings}}) del servizio;
*''dove'' si trova il servizio nella rete (cosiddetto ''endpoint'' o ''port'' del servizio che solitamente corrisponde all'indirizzo — in formato [[Uniform Resource Identifier|URI]] — che rende disponibile il Web service)
 
Le operazioni supportate dal Web service ed i messaggi che è possibile scambiare con lo stesso sono descritti in maniera astratta e quindi non collegati ad uno specifico [[protocollo di rete]] e ad uno specifico formato.
=Uso=
Un [[client]] (programma) che si collega ad un Web Service può leggerne il WSDL per determinare quali funzioni sono disponibili sul [[server]].
Ogni [[tipo di dato]] (datatype) speciale usato come [[parametro]] o [[valore di ritorno]] e' descritto nel WSDL, spesso sotto forma di XML Schema.
Una volta nota l'[[interfaccia]] del servizio il client può usare SOAP chiamare una delle funzioni elencate nel WSDL.
 
Il WSDL è solitamente utilizzato in combinazione con [[SOAP]] e [[XML Schema]] per rendere disponibili Web service su [[rete informatica|reti]] aziendali o su [[internet]]: un programma [[client]] può, infatti, "leggere" il documento WSDL relativo ad un Web service per determinare quali siano le funzioni messe a disposizione sul [[server]] e attraverso il protocollo SOAP utilizzare una o più delle funzioni elencate dal WSDL.
[[Categoria:Informatica]]
 
La versione 1.1 di WSDL non è stata adottata come [[Norma tecnica|standard]] dal [[World Wide Web Consortium]] (W3C).
 
Il 26 giugno 2007 la versione 2.0 è stata promossa a standard ufficiale (in forma di "raccomandazione") dal W3C.
 
== Stili e codifiche ==
Un documento WSDL può essere caratterizzato da quattro distinte combinazioni di stili e codifiche:<ref name="ibm">{{cita web|url=https://www.ibm.com/developerworks/library/ws-whichwsdl/|editore=IBM|autore=Russel Butek|lingua=en|titolo=Which style of WSDL should I use?|data=31 ottobre 2003|accesso=10 settembre 2018|urlarchivio=https://web.archive.org/web/20180823041143/https://www.ibm.com/developerworks/library/ws-whichwsdl/|dataarchivio=23 agosto 2018|urlmorto=no}}</ref><ref>{{cita web|url=http://www.html.it/articoli/wsdl-stili-e-codifiche-4/|titolo=WSDL: stili e codifiche|sito=HTML.it|autore=Marco Parente|urlarchivio=https://web.archive.org/web/20140122231827/http://www.html.it/articoli/wsdl-stili-e-codifiche-4/|dataarchivio=22 gennaio 2014|urlmorto=no}}</ref>
*''RPC/encoded'': ha una struttura molto semplice, ma non è approvato dallo standard [[WS-I]] ed è complesso da validare.
*''RPC/literal'': è di nuovo molto semplice ed è privo di informazioni di codifica sui tipi. Soddisfa inoltre le specifiche WS-I, ma resta complesso da validare.
*''Document/encoded'': non è conforme alle specifiche WS-I e non è praticamente mai utilizzato.
*''Document/literal'': anche qui mancano le informazioni di codifica sui tipi ed è conforme alle specifiche WS-I (con alcune restrizioni). Può inoltre essere facilmente controllato con un [[Validatore (informatica)|validatore]] XML. Tuttavia, la struttura del WSDL diventa più complessa e verbosa. Infine, nel messaggio SOAP non è prevista l'indicazione del metodo utilizzato, per cui può risultare più complesso (o impossibile) capire quale operazione è richiesta dal client.
 
== Esempio di documento WSDL 2.0 ==
<syntaxhighlight lang="xml" line="1" copy=1>
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://www.w3.org/ns/wsdl"
xmlns:tns="http://www.example.com/wsdl20sample"
xmlns:whttp="http://www.w3.org/ns/wsdl/http"
xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"
targetNamespace="http://www.example.com/wsdl20sample">
 
<!-- Abstract types -->
<types>
<xs:schema xmlns="http://www.example.com/wsdl20sample"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/wsdl20sample">
<xs:element name="request">
<xs:complexType>
<xs:sequence>
<xs:element name="header" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="body" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="method" type="xs:string" use="required"/>
<xs:attribute name="uri" type="xs:anyURI" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="response">
<xs:complexType>
<xs:sequence>
<xs:element name="header" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="body" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="status-code" type="xs:anySimpleType" use="required"/>
<xs:attribute name="response-phrase" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
 
<!-- Abstract interfaces -->
<interface name="RESTfulInterface">
<fault name="ClientError" element="tns:response"/>
<fault name="ServerError" element="tns:response"/>
<fault name="Redirection" element="tns:response"/>
<operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="GetMsg" element="tns:request"/>
<output messageLabel="SuccessfulMsg" element="tns:response"/>
</operation>
<operation name="Post" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="PostMsg" element="tns:request"/>
<output messageLabel="SuccessfulMsg" element="tns:response"/>
</operation>
<operation name="Put" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="PutMsg" element="tns:request"/>
<output messageLabel="SuccessfulMsg" element="tns:response"/>
</operation>
<operation name="Delete" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="DeleteMsg" element="tns:request"/>
<output messageLabel="SuccessfulMsg" element="tns:response"/>
</operation>
</interface>
 
<!-- Concrete Binding Over HTTP -->
<binding name="RESTfulInterfaceHttpBinding" interface="tns:RESTfulInterface"
type="http://www.w3.org/ns/wsdl/http">
<operation ref="tns:Get" whttp:method="GET"/>
<operation ref="tns:Post" whttp:method="POST"
whttp:inputSerialization="application/x-www-form-urlencoded"/>
<operation ref="tns:Put" whttp:method="PUT"
whttp:inputSerialization="application/x-www-form-urlencoded"/>
<operation ref="tns:Delete" whttp:method="DELETE"/>
</binding>
<!-- Concrete Binding with SOAP-->
<binding name="RESTfulInterfaceSoapBinding" interface="tns:RESTfulInterface"
type="http://www.w3.org/ns/wsdl/soap"
wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
wsoap:mepDefault="http://www.w3.org/2003/05/soap/mep/request-response">
<operation ref="tns:Get" />
<operation ref="tns:Post" />
<operation ref="tns:Put" />
<operation ref="tns:Delete" />
</binding>
<!-- Web Service offering endpoints for both the bindings-->
<service name="RESTfulService" interface="tns:RESTfulInterface">
<endpoint name="RESTfulServiceRestEndpoint"
binding="tns:RESTfulInterfaceHttpBinding"
address="http://www.example.com/rest/"/>
<endpoint name="RESTfulServiceSoapEndpoint"
binding="tns:RESTfulInterfaceSoapBinding"
address="http://www.example.com/soap/"/>
</service>
</description>
</syntaxhighlight>
 
== Note ==
<references/>
 
== Voci correlate ==
*[[Web service]]
*[[SOAP]]
*[[UDDI]]
*[[Web Application Description Language]]
*[[Business Process Execution Language]]
 
== Collegamenti esterni ==
* {{Cita web|https://www.w3.org/TR/wsdl|Specifiche WSDL 1.1}}
* {{Cita web|https://www.w3.org/TR/wsdl20-primer/|WSDL 2.0 Specification Part 0: Primer (Latest Version)}}
* {{Cita web|https://www.w3.org/TR/wsdl20/|WSDL 2.0 Specification Part 1: Core (Latest Version)}}
* {{Cita web|https://www.w3.org/TR/wsdl20-adjuncts/|WSDL 2.0 Specification Part 2: Adjuncts (Latest Version)}}
* {{Cita web|https://www.w3.org/2002/ws/desc/|Web Services Description Working Group}}
* {{Cita web|https://www.w3.org/2000/xp/|XML protocol activity}}
* {{Cita web|http://www.validwsdl.com/|WSDL Validator}}
 
{{Portale|internet}}
 
[[Categoria:Web service]]
[[Categoria:Standard W3C]]
[[Categoria:Standard informatici basati su XML]]