Diferença entre uma mensagem SOAP e um WSDL?


102

Estou confuso sobre como as mensagens SOAP e WSDL se encaixam? Comecei a pesquisar mensagens SOAP como:

    POST /InStock HTTP/1.1
Host: www.example.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.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

Todas as mensagens SOAP são WSDL? O SOAP é um protocolo que aceita suas próprias 'mensagens SOAP' ou 'WSDL's? Se forem diferentes, quando devo usar mensagens SOAP e quando devo usar WSDLs?

Algum esclarecimento sobre isso seria incrível.


1
Um wsdl é uma especificação de quais mensagens podem ser enviadas e o que pode ser esperado como resposta. De certa forma, o documento wsdl não é necessário para a comunicação do soap, mas é um elemento obrigatório de acordo com o protocolo.
troelskn

Respostas:


121

Um documento SOAP é enviado por solicitação. Digamos que fôssemos uma livraria e tivéssemos um servidor remoto consultado para saber o preço atual de um livro específico. Digamos que precisássemos passar o título do livro, o número de páginas e o número do ISBN para o servidor.

Sempre que queríamos saber o preço, enviamos uma mensagem SOAP exclusiva. Seria algo assim;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

E esperamos receber uma mensagem de resposta SOAP como;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

O WSDL descreve como tratar / processar essa mensagem quando um servidor a recebe. Em nosso caso, ele descreve os tipos de Título, NumPages e ISBN, se devemos esperar uma resposta da mensagem GetBookPrice e como essa resposta deve ser.

Os tipos seriam assim;

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

Mas o WSDL também contém mais informações, sobre quais funções se conectam para fazer operações e quais operações estão disponíveis no serviço, e onde em uma rede você pode acessar o serviço / operações.

Veja também W3 Annotated WSDL Exemplos


4
Quando você diz esta linha "O WSDL descreve como lidar / processar esta mensagem quando um servidor a recebe." Você não acha que há algo errado aqui. Acho que WSDL é mais para o cliente saber quais são os serviços que estão sendo expostos para o cliente. Não acho que orienta o manuseio ou processamento de mensagens para o servidor. Estou fazendo sentido?
Inquebrável

76

Uma mensagem SOAP é um documento XML usado para transmitir seus dados. WSDL é um documento XML que descreve como conectar e fazer solicitações ao seu serviço da web.

Basicamente, as mensagens SOAP são os dados que você transmite. O WSDL informa o que você pode fazer e como fazer as chamadas.

Uma busca rápida no Google irá render muitas fontes para leitura adicional (o link do livro anterior agora está morto, para combater isso colocará novas recomendações nos comentários)

Apenas observando suas perguntas específicas:

Todas as mensagens SOAP são WSDL? Não, eles não são a mesma coisa.

O SOAP é um protocolo que aceita suas próprias 'mensagens SOAP' ou 'WSDL's? Não - leitura necessária, pois isso está longe.

Se forem diferentes, quando devo usar mensagens SOAP e quando devo usar WSDLs? O sabão é a estrutura que você aplica à sua mensagem / dados para transferência. WSDLs são usados ​​apenas para determinar como fazer chamadas para o serviço em primeiro lugar. Freqüentemente, isso acontece apenas uma vez quando você adiciona o código pela primeira vez para fazer uma chamada para um determinado serviço da web.


Estou confuso sobre o que você quer dizer com "coisa única" se pudesse elaborar com alguns exemplos de mensagens que seriam incríveis. Além disso, você está dizendo que as mensagens WSDL e SOAP são usadas juntas?
James

6
WSDL informa como chamar o serviço da web. Freqüentemente, você usará o WSDL para gerar automaticamente o código para chamar o serviço da web e nunca mais usá-lo. Ler os capítulos do livro que vinculei deve ajudar.
Mateus

27

Um WSDL (Web Service Definition Language) é um arquivo de metadados que descreve o serviço da web.

Coisas como nome da operação, parâmetros etc.

As mensagens de sabão são as cargas úteis reais


25

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 GetBookPricemétodo para obter o preço do livro. A resposta é realizada pelo GetBookPriceResponsemé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


  • Descrição do concreto
    TapanHP

    7

    Melhor analogia do que o telefonema: encomendar produtos por correio de um serviço de venda por correspondência. O documento WSDL é como as instruções que explicam como criar o tipo de formulário de pedido que o provedor de serviços aceitará. Uma mensagem SOAP é como um envelope com um design padrão (tamanho, formato, construção) que todos os correios do mundo sabem como lidar. Você coloca seu formulário de pedido em um envelope. A rede (por exemplo, a Internet) é o serviço postal. Você colocou seu envelope no correio. Os funcionários dos correios não olham para dentro do envelope. O XML de carga útil é o formulário de pedido que você incluiu no envelope. Depois que os correios entregam o envelope, o provedor de serviços da Web abre o envelope e processa o formulário de pedido. Se você criou e preencheu o formulário corretamente,


    4

    Em termos simples, se você tiver um serviço web de calculadora. WSDL informa sobre as funções que você pode implementar ou expor ao cliente. Por exemplo: adicionar, excluir, subtrair e assim por diante. Onde, ao usar o SOAP, você realmente executa ações como doDelete (), doSubtract (), doAdd (). Portanto, SOAP e WSDL são maçãs e laranjas. Não devemos compará-los. Ambos têm suas próprias funcionalidades diferentes.


    1

    SOAP: É um protocolo de comunicação baseado em XML de padrão aberto que é usado para trocar informações do usuário para o serviço web ou vice-versa. O sabão é apenas o documento no qual os dados são organizados de alguma forma. Para cada solicitação e resposta, sabonete separado pode estar presente.

    WSDL: Em soap, os dados são organizados de alguma maneira e essa organização é especificada em WSDL. O tipo de dados que deve ser usado também é especificado aqui. Para solicitação e resposta, WSDL único estará presente


    0

    O WSDL é uma espécie de contrato entre o provedor de API e o cliente e descreve o serviço web: a função pública, campo opcional / obrigatório ...

    Mas a mensagem soap é uma transferência de dados entre cliente e provedor (carga útil)


    0

    WSDL atua como uma interface entre o remetente e o destinatário.
    A mensagem SOAP é um pedido e uma resposta no formato xml.

    comparando com java RMI

    WSDL é a
    mensagem SOAP da classe de interface é uma mensagem de solicitação e resposta empacotada.


    -1

    Podemos considerar um telefonema Nesse Número é wsdl e a troca de informações é sabonete.

    WSDL é a descrição de como se conectar ao servidor de comunicação. O SOAP é ter mensagens de comunicação.


    1
    Não, o número de telefone seria mais como um dos terminais definidos no WSDL. Não há equivalente real para WSDL no domínio das chamadas telefônicas. O mais próximo pode ser uma lista telefônica, especialmente se você incluir o conceito de "páginas amarelas", que categoriza as empresas e fornece alguns detalhes sobre a empresa (não apenas o número de telefone).
    John Saunders
    Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
    Licensed under cc by-sa 3.0 with attribution required.