Dobbiamo definire cosa sia un servizio web prima di dire quali sono le differenze tra SOAP e WSDL dove i due (SOAP e WSDL) sono componenti di un servizio web
La maggior parte delle applicazioni sono sviluppate per interagire con gli utenti, l'utente immette o cerca dati tramite un'interfaccia e l'applicazione risponde quindi all'input dell'utente.
Un servizio Web fa più o meno la stessa cosa tranne che un'applicazione di servizio Web comunica solo da macchina a macchina o da applicazione a applicazione. Spesso non c'è interazione diretta dell'utente.
Un servizio Web è fondamentalmente una raccolta di protocolli aperti utilizzati per lo scambio di dati tra le applicazioni. L'utilizzo di protocolli aperti consente ai servizi Web di essere indipendenti dalla piattaforma. Il software scritto in diversi linguaggi di programmazione e che viene eseguito su piattaforme diverse può utilizzare i servizi Web per lo scambio di dati su reti di computer come Internet. In altre parole, le applicazioni Windows possono dialogare con PHP, Java e Perl e molte altre, cosa che in circostanze normali non sarebbe possibile.
Come funzionano i servizi Web?
Poiché applicazioni diverse sono scritte in linguaggi di programmazione diversi, spesso non possono comunicare tra loro. Un servizio Web consente questa comunicazione utilizzando una combinazione di protocolli e standard aperti, principalmente XML, SOAP e WSDL. Un servizio Web utilizza XML per contrassegnare i dati, SOAP per trasferire un messaggio e infine WSDL per descrivere la disponibilità dei servizi. Diamo un'occhiata a questi tre componenti principali di un'applicazione di servizio Web.
Simple Object Access Protocol (SOAP)
Il Simple Object Access Protocol o SOAP è un protocollo per l'invio e la ricezione di messaggi tra applicazioni senza affrontare problemi di interoperabilità (l'interoperabilità significa che la piattaforma su cui è in esecuzione un servizio Web diventa irrilevante). Un altro protocollo che ha una funzione simile è HTTP. Viene utilizzato per accedere a pagine Web o per navigare in rete. HTTP garantisce che non devi preoccuparti del tipo di server Web, che sia Apache, IIS o qualsiasi altro, ti serve le pagine che stai visualizzando o se le pagine che visualizzi sono state create in ASP.NET o HTML.
Poiché SOAP viene utilizzato sia per la richiesta che per la risposta, il suo contenuto varia leggermente a seconda del suo scopo.
Di seguito è riportato un esempio di richiesta SOAP e messaggio di risposta
Richiesta SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPrice>
<m:BookName>The Fleamarket</m:BookName>
</m:GetBookPrice>
</soap:Body>
</soap:Envelope>
Risposta SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPriceResponse>
<m: Price>10.95</m: Price>
</m:GetBookPriceResponse>
</soap:Body>
</soap:Envelope>
Sebbene entrambi i messaggi abbiano lo stesso aspetto, eseguono metodi diversi. Ad esempio, guardando gli esempi sopra, puoi vedere che il messaggio di richiesta utilizza il GetBookPrice
metodo per ottenere il prezzo del libro. La risposta viene eseguita con il GetBookPriceResponse
metodo, che sarà il messaggio che vedrai tu come "richiedente". Puoi anche vedere che i messaggi sono composti utilizzando XML.
Linguaggio di descrizione dei servizi Web o WSDL
WSDL è un documento che descrive un servizio Web e spiega anche come accedere e utilizzare i suoi metodi.
WSDL si occupa di sapere quali metodi sono disponibili in un servizio Web in cui ci si imbatte in Internet.
Dai un'occhiata a un file WSDL di esempio:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name ="DayOfWeek"
targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="DayOfWeekInput">
<part name="date" type="xsd:date"/>
</message>
<message name="DayOfWeekResponse">
<part name="dayOfWeek" type="xsd:string"/>
</message>
<portType name="DayOfWeekPortType">
<operation name="GetDayOfWeek">
<input message="tns:DayOfWeekInput"/>
<output message="tns:DayOfWeekResponse"/>
</operation>
</portType>
<binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetDayOfWeek">
<soap:operation soapAction="getdayofweek"/>
<input>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="DayOfWeekService" >
<documentation>
Returns the day-of-week name for a given date
</documentation>
<port name="DayOfWeekPort" binding="tns:DayOfWeekBinding">
<soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/>
</port>
</service>
</definitions>
Le cose principali da ricordare su un file WSDL sono che ti fornisce:
Una descrizione di un servizio Web
I metodi utilizzati da un servizio Web e i parametri utilizzati
Un modo per individuare i servizi Web