Como funciona o SOAP – Protocolo Simples de Acesso a Objetos

SOAP

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

 

O que é SOAP?

SOAP significa Protocolo Simples de Acesso a Objetos, é um protocolo de comunicação baseado em XML que permite a comunicação de mensagens entre aplicações via HTTP, normalmente utilizado em WebServices.

Uma das grandes qualidades desse protocolo é sua independência de plataforma e linguagem além de ser simples e extensível por utilizar XML.

Construção de uma mensagem SOAP

Pacote SOAP

Mensagem SOAP

Uma mensagem SOAP é um documento XML comum contendo um elemento chamado Envelope que identifica o documento XML como uma mensagem SOAP, um elemento Header que contém informações sobre o cabeçalho do documento, e um elemento Body que é o corpo do documento contendo informações de chamada e resposta, dentro do corpo contém um elemento Fault que contém erros e informações de status.

Sintaxe da mensagem SOAP

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

O Elemento Envelope

O elemento Envelope é o elemento raiz da mensagem SOAP. Este elemento define o documento XML como uma mensagem SOAP.

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

Bem, neste exemplo vimos que no Elemento Envelope temos dois atributos, o xmlns:soap e o soap:encodingStyle. O primeiro define o namespace da Mensagem SOAP se for utilizado um namespace diferente ira gerar erro ao enviar o pacote e sua mensagem será descartada, o segundo atributo define os tipos de dados utilizados no documento.

O Elemento Header

Este elemento contem informações especificas do aplicativo da mensagem SOAP. É um elemento opcional, se ele estiver presente deve ser o primeiro elemento filho do elemento Envelope.

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

Acima temos um exemplo de um cabeçalho SOAP, os atributos no cabeçalho define como um destinatário deve processar a mensagem SOAP.

O Atributo mustUnderstand

O atributo mustUnderstand pode ser usado para indicar se uma entrada de cabeçalho é obrigatória ou opcional para o destinatário de processar.

Se você adicionar mustUnderstand = “1” para um elemento filho do elemento Header indica que o receptor deve reconhecer o elemento ao processar o Header. Se o receptor não reconhece o elemento irá falhar ao processar o Header.

O mustUnderstand aceita 0 ou 1.

Exemplo de implementação:

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

O Atributo Actor

Uma mensagem SOAP pode viajar do emissor ao receptor passando por diferentes pontos ao longo do caminho até seu ultimo ponto. No entanto uma ou mais partes da mensagem não são destinadas ao ultimo ponto. O Atributo Actor é usado pelo Header para especificar este ponto.

Exemplo de implementação:

<soap:Header>
  <m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:actor="http://www.w3schools.com/appml/">234
  </m:Trans>
</soap:Header>

O Elemento Body

O elemento Body contem a mensagem SOAP pretendida que o usuário espera.
Elementos filhos do elemento Body pode conter namespace.

Exemplo:

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

O exemplo acima seria como uma requisição de preço de uma maça.
Podemos interpretar como se fosse a chamada de um método, você tem uma tag m:getPrice que seria o nome do método, e estaria passando um parâmetro m:Item que é a “Apples”.

A resposta SOAP seria como:

<?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>
  <m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
	<m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>

O Elemento Fault

O elemento Fault do SOAP é o elemento de falha aonde possui erros e informações de status de uma mensagem SOAP.
Este elemento é opcional e quando estiver presente deve aparecer como um elemento filho do elemento Body. Ele pode conter os seguintes sub elementos:

SubElemento Descrição
faultcode Código de identificação de erro
faultstring Explicação legível da falha
faultactor Informações sobre o que pode ter provocado a falha
detail Informações especificas sobre o erro

Os códigos de identificação de erro devem ser utilizados da seguinte maneira:

 

Erro Descrição
VersionMismatch Encontrou um namespace inválido para o elemento envelope SOAP
MustUnderstand Um elemento filho imediato do elemento de Header, com o atributo mustUnderstand definido como “1”, não foi compreendido
Cliente A mensagem foi formada incorretamente ou continham informações incorretas
Servidor Houve um problema com o servidor.

Exemplo de implementação:

<?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>
	…
    <soap:Fault>
     <faultcode>soap:Client</faultcode>
     <faultstring>
          Failed to locate method (ValidateCreditCard) in class
          (examplesCreditCard) at /usr/local/ActivePerl-5.6/lib/
            site_perl/5.6.0/SOAP/Lite.pm line 1555.
        </faultstring>
      </soap:Fault>
</soap:Body>

</soap:Envelope>

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

Comunicação HTTP SOAP

Como funciona o protocolo HTTP?

O HTTP se comunica através de TCP/IP. Um cliente http conecta a um servidor usando TCP.
Depois que a conexão foi estabelecida o cliente pode enviar uma requisição http para o servidor como:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

O servidor processa a requisição e envia uma resposta HTTP para o cliente. A resposta contem um código de status para indicar falhas ou sucesso.

200 OK
Content-Type: text/plain
Content-Length: 200

No exemplo acima mostramos uma requisição que retornou com sucesso, caso for falha ira retornar algo como :

400 Bad Request
Content-Length: 0

Comunicação SOAP HTTP:

Um método SOAP é uma requisição/resposta HTTP que esta em conformidade com as regras de codificação SOAP especificadas pela W3C

Ou seja: HTTP+XML = SOAP.

Content-Type

Define o tipo MIMEType da mensagem e sua codificação(charset) para o corpo do xml usado na requisição e na resposta.

Content-Length

Especifica o numero de bytes no corpo da requisição e resposta.

 

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

 

Exemplo de comunicação SOAP

Solicitação:

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

 

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>

Resposta:

Mudamos, veja em: http://helpdev.com.br/2012/03/22/como-funciona-o-soap-protocolo-simples-de-acesso-a-objetos/

FONTE: http://www.w3schools.com/soap/

Anúncios

3 comentários sobre “Como funciona o SOAP – Protocolo Simples de Acesso a Objetos

  1. Antes de tudo, parabéns pelo post. Veja se consegue me ajudar, estou com uma dúvida, usando a extensão SOAP do PHP, como eu faço para ter acesso ao arquivo XML, pois preciso colocar uma assinatura digital nele antes de enviar, e pelo que eu vi, a gnt não tem acesso ao arquivo XML propriamente dito. Obrigado.

  2. Pingback: “Fala, professor!” Prova do ICMS-SP área Tributária | Blog IOB Concursos

  3. Republicou isso em SpitzerGeeKe comentado:
    Como funciona o SOAP? Sempre complicam o que pode ser entendido.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s