SOAP: Simple Object Access Protocol
SOAP é um padrão de representação bastante leve para envelopes contendo dados que devem se mover entre o provedor e o cliente de um determinado Web Service. SOAP se baseia em XML para descrever o conteúdo da mensagem e a maneira como ela deve ser processada. Além disso, oferece também maneiras de realizar o transporte dessa mensagem através dos protocolos que já são um padrão na Web como o HTTP (GET ou POST).
Junto com o framework aparece uma série de especificações e regras de codificação que definem o protocolo SOAP. São elas:
Envelope SOAP: Descreve o conteúdo da mensagem e como processá-la. além de conter detalhes extras como informações de segurança ou até o destino final da mensagem;
Framework de transporte SOAP: Um framework abstrato para troca de envelopes SOAP utilizando algum protocolo de camada mais inferior para e envio/recebimento como HTTP;
Framework de Serialização SOAP: Um conjunto de regras utilizadas para codificação dos tipos de dados definidos pela aplicação;
Representação RPC: Uma convenção para representar chamadas remotas de procedimentos (RPC) e respostas.
Um exemplo de um envelope SOAP enviado em uma requisição HTTP pode ser visto na figura abaixo:
HTTP Request
HTTP Response
A parte de cima de ambas as mensagens mostradas nas figuras são os cabeçalhos HTTP. A união do HTTP com o XML é o padrão SOAP que estamos definindo. As informações de um cabeçalho HTTP escapam do escopo deste documento e não serão tratadas aqui.
Sintaxe SOAP
Abaixo seguem algumas regras para criação de um envelope SOAP válido:
Deve ser codificado usando XML;
A mensagem deve conter o namespace correto de codificação e envelopamento; (Veja o exemplo)
Uma mensagem SOAP não deve conter um DTD;
Uma mensagem SOAP não deve conter informações de decodificação de XML.
Abaixo o esqueleto de uma mensagem SOAP para ser analisado:
Os elementos principais de um envelope SOAP são:
soap:Envelope - É o elemento raiz da mensagem. É este elemento que define a mensagem em questão como uma mensagem SOAP.
soap:Header (opcional) - Contém informações específicas da aplicação como autenticação por exemplo. Se este elemento existir ele deve ser o primeiro elemento do envelope.
soap:Body - Carrega a informação real do envelope SOAP destinada ao serviço. É uma tag obrigatória.
soap:Fault - Carrega informações de erros com o envelope SOAP.
Além do SOAP são utilizadas tecnologias de integração de serviços como CORBA e DCOM que são tecnologias proprietárias que não oferecem suporte a todo tipo de sistema operacional. Como uma maneira eficiente de comunicação através de HTTP o SOAP foi criado para facilitar a integração de sistemas diferentes com tipos de dados diferentes através da internet.