Precisamos definir o que é um serviço da web antes de dizer quais são as diferenças entre o SOAP e WSDL onde os dois (SOAP e WSDL) são componentes de um serviço da web
A maioria dos aplicativos é desenvolvida para interagir com os usuários, o usuário insere ou pesquisa dados por meio de uma interface e o aplicativo responde à entrada do usuário.
Um serviço da Web faz mais ou menos a mesma coisa, exceto que um aplicativo de serviço da Web se comunica apenas de máquina para máquina ou de aplicativo para aplicativo. Geralmente, não há interação direta do usuário.
Um serviço da Web é basicamente uma coleção de protocolos abertos que são usados para trocar dados entre aplicativos. O uso de protocolos abertos permite que os serviços da Web sejam independentes de plataforma. O software que é escrito em diferentes linguagens de programação e executado em diferentes plataformas pode usar serviços da Web para trocar dados em redes de computadores, como a Internet. Em outras palavras, aplicativos Windows podem se comunicar com aplicativos PHP, Java e Perl e muitos outros, o que em circunstâncias normais não seria possível.
Como funcionam os serviços da Web?
Como diferentes aplicativos são escritos em diferentes linguagens de programação, eles geralmente não podem se comunicar uns com os outros. Um serviço da Web permite essa comunicação usando uma combinação de protocolos e padrões abertos, principalmente XML, SOAP e WSDL. Um serviço da Web usa XML para marcar dados, SOAP para transferir uma mensagem e finalmente WSDL para descrever a disponibilidade dos serviços. Vamos dar uma olhada nesses três componentes principais de um aplicativo de serviço da Web.
Protocolo de Acesso a Objetos Simples (SOAP)
O Simple Object Access Protocol ou SOAP é um protocolo para enviar e receber mensagens entre aplicativos sem enfrentar problemas de interoperabilidade (interoperabilidade significa que a plataforma em que um serviço da Web está sendo executado torna-se irrelevante). Outro protocolo com função semelhante é o HTTP. Ele é usado para acessar páginas da Web ou para navegar na Internet. O HTTP garante que você não precise se preocupar com o tipo de servidor Web - seja Apache ou IIS ou qualquer outro - que atende as páginas que você está visualizando ou se as páginas visualizadas foram criadas em ASP.NET ou HTML.
Como o SOAP é usado tanto para solicitar quanto para responder, seu conteúdo varia um pouco dependendo de sua finalidade.
Abaixo está um exemplo de uma solicitação SOAP e mensagem de resposta
Solicitação 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>
Resposta 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>
Embora as duas mensagens tenham a mesma aparência, elas executam métodos diferentes. Por exemplo, olhando para os exemplos acima, você pode ver que a mensagem solicitante usa o GetBookPrice
método para obter o preço do livro. A resposta é realizada pelo GetBookPriceResponse
método, que vai ser a mensagem que você como "solicitante" verá. Você também pode ver que as mensagens são compostas usando XML.
Linguagem de descrição de serviços da Web ou WSDL
WSDL é um documento que descreve um serviço da Web e também informa como acessar e usar seus métodos.
WSDL cuida de como você sabe quais métodos estão disponíveis em um serviço da Web que você encontra na Internet.
Dê uma olhada em um arquivo WSDL de amostra:
<?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>
As principais coisas a lembrar sobre um arquivo WSDL são que ele fornece:
Uma descrição de um serviço da Web
Os métodos que um serviço da Web usa e os parâmetros que ele usa
Uma maneira de localizar serviços da Web