SOAP – Simple Object Access Protocol

Introdução

SOAP é um protocolo simples baseado em XML que permite aplicações trocarem informações usando o protocolo HTTP, ou seja é um protocolo usado para acessar Web Serviçes.

Características

– É um protocolo de comunicação
– É utilizado para comunicação entre aplicativos
– É um formato para envio de mensagens
– SOAP é usado para comunicação através da internet
– É independente de plataforma
– É independente da linguagem
– É baseado em XML
– É simples e extensível.
– Permite contornar firewalls
– É uma recomendação da W3C

Por que utilizar SOAP?

Ele é um protocolo importante pois permite a comunicação entre programas utilizando a Internet.

Atualmente as aplicações se comunicam usando Remote Procedure Calls (RPC) usando objetos como DCOM e CORBA, mas o HTTP não foi projetado para esse tipo de aplicação. O RPC apresenta problemas de compatibilidade e segurança, por isso firewall e servidores proxy normalmente bloqueam esse tipo de tráfego, o protcolo RPC roda na porta 135 TCP.

Como a melhor maneira de se comunicar entre as aplicações é através de HTTP, e o HTTP é suportado por todos os navegadores de internet e servidores foi desenvolvido o SOAP para fazer isso.

Estrutura do protocolo SOAP

Uma mensagem SOAP é um documentos XML simples que contém os seguintes elementos:

  • Um elemento Envelope, que identifica o documento XML com sendo uma mensagem SOAP.
  • Um elemento Header que contem as informações de cabeçalho.
  • Um elemento Body,  que contem as informações de chamadas e respostas.
  • Um elemento Fault, que contem erros e informações de status.

No endereço http://www.w3.org/2001/12/soap-envelope pode-se ver um exemplo de mensagem usando o SOAP

Regras de Syntaxe

Algumas das regras de sintaxe do SOAP  são as seguintes:

  • Uma mensagem SOAP deve ser codificada usando XML
  • Uma mensagem SOAP usa o SOAP Envelope namespave
  • Uma mensagem SOAP deve suar o SOAP Encoding namespace
  • Uma mensagem SOAP não contem referencia DTD.
  • Uma mensagem SOAP não contêm instruções de processamento XML
Estrutura de uma mensagem SOAP

O elemento Envelope é o primeiro elemento de uma mensagem SOAP.

O elemento SOAP Envelope

O elemento Envelope é o elemento raiz de uma mensagem SOAP, este elemento define o documento XML como sendo uma mensagem SOAP.

O namespace xmlns:soap

Este namespace define o envelope como um envelope SOAP, por isso sempre tem que ser usado esse valor “http://www.w3.org/2001/12/soap-envelope” caso seja utilizado um valor diferente a aplicação irá gerar um erro e descartar a mensagem.

O atributo encodingStyle

Este atributo é usado para definir o tipo de dados que está sendo usado no documento. Este atributo pode aparecer em qualquer elemento SOAP, e define o conteúdo do elemento e todos os seus filhos.
Uma mensagem SOAP não tem uma codificação padrão.

Sintaxe

soap:encodingStyle=”URI

O elemento Header

O elemento opcional Header contém informações especificas de uma aplicação (como autenticação e etc) relativas a mensagem SOAP.
Se o elemento Header estiver presente, ele deve ser o primeiro elemento filho do elemento Envelope.

O exemplo acima contém um elemento Header com um elemento “Trans”, e um atributo “mustUnderstand” de valor 1, e o valor de “Trans” é 234.
O SOAP define 3 atributos no namespace padrão (“http://www.w3.org/2001/12/soap-envelope”), que são eles: mustUndestand, actor e encodingStyle.
Os atributos definidos no Header definem como o receptor deve processar a mensagem SOAP.

O atributo mustUndestand

O atributo mustUndestand pode ser usado para indicar se uma entrada de cabeçalho é obrigatória ou facultativa para o processamento do destinatário.
Se for setado mustUndestand = “1” para o elemento filho do Header vai indicar que o receptor que processar o header deve reconhecer o elemento. Se o receptor não reconhecer o elemento ele irá falhar no processamento do Header.

Sintaxe

soap:mustUnderstand=”0|1″

O atributo actor

Uma mensagem ir do emissor ao receptor passando por diferentes pontos intermediários ao longo do caminho. No entanto , nem todas as partes da mensagem pode ser destinada ao ponto final, em vês disso ela pode ser destinada a um ou mais pontos intermediário no caminho da mensagem.

Sintaxe

soap:actor=”URI

Exemplo

O atributo encodingStyle
O atributo encodingStyle é usado para definir o tipo de codificação que será usado no documento.  Este atributo pode aparecer em qualquer elemento SOAP, e ele será válido para o elemento e todos os filhos dele.
Uma mensagem SOAP não tem uma codificação padrão.

Sintaxe
soap:encodingStyle=”URI

O elemento Body

O elemento Body contém a mensagem SOAP que é destinada ao receptor da mensagem.
Os elementos filhos do elemento Body podem ser qualificados pela namespace.

Exemplo

O exemplo acima faz a requisição do preço das maças. Verifique que os elementos m:GetPrice e Item são elementos específicos da aplicação. Estes elementos não fazem parte do namespace do SOAP.

A resposta SOAP pode ser vista abaixo:

O Elemento Fault

O  elemento opcional Fault é usado para indicar mensagem de erro.
Se este elemento estiver presente, ele aparecera como filho do elemento Body. O elemento Fault só pode aparecer uma vês em cada mensagem SOAP.
O elemento Fault tem os seguintes sub elementos:

Sub elementoDescrição
< faultcode >Um código para identificar o Fault
< faultstring >Uma explicação legível da falha.
< faultactor >Informação porque a falha aconteceu
< detail >Informações especificas relacionadas a falha

Códigos SOAP Fault
Os valores do faultcode estão definidos na tabela abaixo e são usados por ele para descrever falhas:

ErroDescrição
VersionMismatchFoi encontrado um namespace inválido para o elemento Envelope
MustUndestandUm filho imediato do elemento Header que esta com o atributo mustUndestand setado para 1 não foi compreendido.
ClientA mensagem foi incerretamente formatada ou contem informações incorretas
ServerHá um problema com o servidor e a mensagem não pode ser processada.
O protocolo HTTP

O protocolo HTTP se comunica sobre TCO/IP, um cliente HTTP se conecta a um servidor usando o TCP. Após a conexão estar estabelecida, o cliente pode enviar uma requisição HTTP:

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

O servidor processa a requisição e envia uma resposta HTTP de volta ao cliente. A resposta contém um status que indica o status da requisição:

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

No exemplo acima o servidor retornou o código de status 200, sendo este o código de sucesso do HTTP.
Caso o servidor não consiga interpretar a solicitação, ele pode retornar uma mensagem como está:

400 Bad Request
Content-Length: 0

SOAP HTTP Binding

Um metodo SOAP é uma request/response HTTP que cumpre as regras de codificação SOAP.

Uma requisição SOAP pode ser um HTTP POST ou um HTTP GET . O HTTP POST especifica pelo menos dois cabeçalhos: Content-Type e Content-Lenght.

Content-Type

O cabeçalho Content-Type nas requisições e respostas SOAP definem o MIME type da mensagem e opcionalmente a codificação usada no corpo do XML em requisições e respostas.

Sintaxe
Content-Type: MIMEType; charset=character-encoding

Exemplo
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Lenght
O cabeçalho Content-Lenght usado nas requisições e respostas SOAP especificam o numero de bytes no corpo da requisição ou da resposta.

Sintaxe
Content-Length: bytes

Exemplo
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

Exemplo SOAP

No exemplo abaixo, a requisição GetStockPrice é enviada para o servidor. A requisição tem um parâmetro StokeName, e o parâmetro Price será retornado na resposta. O namespace para a função é definida em “http://www.example.org/stock”

Requisição SOAP:

Resposta SOAP:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *