Introdução ao SOAP

O SOAP (Simple Object Access Protocol) é um protocolo concebido para trocar informação estruturada num ambiente descentralizado. Usa as tecnologias de XML para definir uma estrutura de mensagens extensíveis que podem ser trocadas sobre uma variedade de protocolos subjacentes. A estrutura foi projectada para ser independente de qualquer linguagem de programação, modelo ou outra implementação específica. O SOAP habilita aplicações cliente a ligarem-se a serviços remotos e invocarem métodos desses serviços. Assim, uma aplicação cliente pode adicionar um serviço disponibilizado na web, ao seu feature set, localizar o serviço SOAP apropriado e invocar o método correcto.

Ao contrário de outras arquitecturas distribuídas, como o COM/COM+ e o CORBA, o SOAP é meramente um protocolo de comunicação. Para conseguirmos comparar com essas arquitecturas temos que implementar o protocolo SOAP como uma arquitectura distribuída.

O SOAP oferece:

  • Mecanismo para definir a unidade de comunicação,
  • Mecanismo para lidar com erros,
  • Mecanismo de extensão que permite evolução,
  • Mecanismo entre as mensagens SOAP e o HTTP, representar tipos de dados em XML.

O SOAP pode ser usado numa variedade de sistemas de mensagens e protocolos. As mensagens SOAP são escritas inteiramente em XML e, portanto, são independentes das linguagens e plataformas. Desta forma, um cliente Java usando SOAP, correndo em Solaris, ou um cliente Perl usando SOAP correndo em Linux, podem ligar-se a um servidor Windows 2000 executando SOAP. O protocolo SOAP representa a essência da arquitectura de serviços na web, habilitando diversas aplicações a trocarem dados e serviços.

SOAP: pedidoPode ver na figura o pedido SOAP. Este pedido é encapsulado dentro de um envelope SOAP (que por sua vez é encapsulado dentro do pedido HTTP, assumindo que estamos a usar HTTP como transporte). O envelope SOAP é dividido em duas partes, um Header (cabeçalho) e um Body (corpo). O SOAP Header aparece imediatamente a seguir à tag XML que abre o envelope, mas o seu uso é opcional.

É provável também, caso o Header exista, que se encontre um ou mais Headers que nos vão fornecendo meta-informação especifica da aplicação. Essa meta-informação pode conter qualquer coisa, embora a especificação do SOAP use o ID da transacção como exemplo.

O SOAP Header:

<?xml version="1.0"?>
<soap:Envelope
   xmlns:soap="http://www.w3.org/2001/12/s oap-envelope"
   soap:encodingStyle="http://www.w3.org/2 001/12/soap-encoding">
   <soap:Header>
      <m:Trans xmlns:m="http://www.mysite.com/transact ion/" soap:mustUnderstand="1">234</m:Trans>
   </soap:Header>
   ...
   ...
</soap:Envelope>

O SOAP Body contém os argumentos e os nomes dos métodos remotos a serem chamados. 

<?xml version="1.0"?>
<soap:Envelope
   xmlns:soap="http://www.w3.org/2001/12/s oap-envelope"
   soap:encodingStyle="http://www.w3.org/2 001/12/soap-encoding">
   <soap:Body>
      <m:GetPrice xmlns:m="http://www.mysite.com/prices">
         <m:Item>Apples</m:Item>
      </m:GetPrice>
   </soap:Body>
</soap:Envelope>

Toda a informação é serealizada usando XML. Embora o SOAP use XML, que é formato de texto, podem ser usadas estruturas, unions e serem passados parâmetros por referência.

Publicado na edição 13 (PDF) da Revista PROGRAMAR.