Tópicos de Sistemas
de Informação A
Carlos Oberdan Rolim
Ciência da Computação
SOAP
(Simple Object Access Protocol)
Contexto
Introdução
SOAP significa Simple Object Access Protocol.
SOAP é um protocolo de comunicação.
SOAP é para comunicação entre aplicações.
SOAP é um simples protocolo baseado em XML para
permitir aplicações trocarem informação sobre HTTP
ou outro protocolo.
Introdução
Surgiu em 1998
Proposto pela DevelopMentor, Microsoft e UserLand Software como um
“Internet Draft”
Definia um mecanismo para transmissão de procedimentos remotos
XML sobre HTML
Proposta a W3C em Maio de 2000
Primeira versão pública em Dezembro de 2001
Versão atual 1.2
Arquitetura
Plataforma de Serviço na Web
SOAP
request
Servidor
SOAP
Converte msg SOAP a
tipo de dado e invoca
o serviço.
Cliente
SOAP
Converte resultado da
operação a msg SOAP
e envia msg.
SOAP
response
Serviç
o
SOAP 1.2
Dividido em duas partes
Service Oriented Architecture Protocol:
Framework de mensagens
Mensagem representa a informação necessária para invocar um
serviço ou analisar o resultado de uma chamada e contém
informações específicas da definição da interface do serviço.
Service Object Access Protocol:
um conjunto de regras de codificação para expressar instâncias
dos tipos de dados definidos pela aplicação
uma convenção para representar RPCs e respostas
um conjunto de regras para usar SOAP com HTTP/1.1
Define o método de invocação de um objeto remoto
Principais vantagens
Pode atravessar firewalls com facilidade.
Os dados do SOAP são estruturados usando XML. Portanto,
as mensagens podem ser compreendidas por quase todas
as plataformas de hardware, sistemas operacionais e
linguagens de programação.
Pode ser usado, potencialmente, em combinação com vários
protocolos de transporte de dados, como HTTP, SMTP e
FTP.
O SOAP mapeia satisfatoriamente para o padrão de
solicitação / resposta HTTP.
Pode ser usado tanto de forma anônima como com
autenticação (nome/senha).
Principais desvantagens
Falta de interoperabilidade entre ferramentas de
desenvolvimento do SOAP.
Embora o SOAP tenha amplo suporte, ainda existem problemas de
incompatibilidades entre diferentes implementações do SOAP.
Mecanismos de Segurança Imaturos.
O SOAP não define mecanismo para criptografia do conteúdo de uma
mensagem SOAP, o que evitaria que outros tivessem acesso ao
conteúdo da mensagem.
Não existe garantia quanto à entrega da mensagem.
Quando uma mensagem estiver sendo transferida, se o sistema falhar,
ele não saberá como reenviar a mensagem.
Um cliente SOAP não pode enviar uma solicitação a vários
servidores, sem enviar a solicitação a todos os servidores.
Incapacidade de transportar conteudo complexo como
arquivos de imagens ou sons
Funcionalidades
Interoperabilidade entre sistemas utilizando linguagens e
protocolos padronizados largamente difundidos, como XML e
HTTP.
Permite a comunicação entre sistemas protegidos por
firewalls, sem precisar abrir portas adicionais e
possivelmente não seguras. Ele utiliza (na maioria dos
servidores) a porta 80.
SOAP descreve completamente cada elemento na
mensagem, facilitando o entendimento e a proteção contra
erros.
Estrutura de uma mensagem
SOAP Envelope
Soap basea-se na troca de mensagens
Mensagens são vistas como envelopes
que as aplicações usam para enviar
dados
Uma mensagem contém dua partes:
cabeçalho e corpo. Ambos podem ser
divididos em blocos
SOAP não especifica o que fazer com o
cabeçalho e o corpo. Ele somente diz
que o cabeçalho é opcional e o corpo
mandatório
Entretanto uso do corpo e cabeçalho são
implicitos. Corpo define os dados da
aplicação e o cabeçalho define a
estrutura
SOAP header
Header Block
SOAP Body
Body Block
Estrutura de uma mensagem
<SOAP-ENV:envelope>
<!— Elemento raiz do SOAP e define que essa é uma mensagem SOAP>
<SOAP-ENV:header>
<!—Especifica informações especificas como autenticação (opcional)-->
</SOAP-ENV:header>
<SOAP-ENV:body>
<!—O elemento BODY contém o corpo da mensagem-->
<SOAP-ENV:fault>
<!—O elemento FAULT contém os erros que podem ocorrer-->
</SOAP-ENV:fault>
</SOAP-ENV:body>
</SOAP-ENV:envelope>
Estrutura de uma mensagem
Envelope: obrigatório. Define conteúdo da mensagem
encodingStyle: atributo que tem como objetivo especificar como as
informações devem ser codificadas.
<SOAP-ENV:Envelope xmlns:SOAP
ENV=”http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Header>
...
</SOAP-ENV:Header>
<SOAP-ENV:Body>
…
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Estrutura de uma mensagem
Header: opcional. Contém os dados do cabeçalho
<SOAP-ENV:Envelope xmlns:SOAP ENV=”http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Header>
<a:authentication xmlns:a=”http://www.foo.com/soap/authentication”>
<a:username>Admin</a:username>
<a:password>SuperPass</a:password>
</a:authentication>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
…
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Estrutura de uma mensagem
Elemento actor
especifica o receptor que deve processar o elemento do cabeçalho.
<SOAP-ENV:Envelope xmlns:SOAP ENV=”http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Header>
<a:authentication xmlns:a=”http://www.foo.com/soap/authentication”
SOAP-ENV:actor=”http://www.foo.com/soap/authenticator”>
<a:username>Admin</a:username>
<a:password>Pass</a:password>
</a:authentication>
</SOAP-ENV:Header>
Estrutura de uma mensagem
Elemento mustUnderstand
especifica se uma entrada de cabeçalho é obrigatória ou opcional
(booleano)
Se for acrescido mustUnderstand=“1” a um elemento filho no
cabeçalho, indica que o receptor deve reconhecer esse elemento. Se
ele não reconhecer deve ser retornada uma falha quando o cabeçalho
for processado
<SOAP-ENV:Envelope xmlns:SOAP ENV=”http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Header>
<a:authentication xmlns:a=”http://www.foo.com/soap/authentication”
SOAP-ENV:mustUndestrand=”1”
<a:username>Admin</a:username>
<a:password>Pass</a:password>
</a:authentication>
</SOAP-ENV:Header>
Estrutura de uma mensagem
Body: Obrigatório.
contém a codificação atual de uma chamada a um método e todos os
argumentos de entrada ou uma resposta codificada que contém o
resultado de uma chamada de um método.
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soapenvelope" soap:encodingStyle="http://www.w3.org/2001/12/soapencoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3schools.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
Estrutura de uma mensagem
Resposta da requisição
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soapenvelope"
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>
Estrutura de uma mensagem
Elemento Fault:
contém as informações dos erros ocorridos no envio da mensagem.
Apenas nas mensagens de resposta do servidor.
Se o elemento Fault existe ele deve aparecer como um elemento filho
do elemento Body.
Elemento Fault pode aparecer apenas uma vez em uma mensagem
SOAP
Estrutura de uma mensagem
Elemento Fault:
Possui os seguintes subelemento
<faultcode> Para identificar o código da falta
<faultstring> Descriçao da falta
<faultactor> Informação de quem originou a falta
<detail>
Informações específicas de erro relacionada ao
elemento Body
Estrutura de uma mensagem
Alguns exemplos de erros:
Error:
VersionMismatch
Description: Encontrado um namespace invalido no envelope SOAP
Error:
MustUnderstan
Description: Um elemento filho do elemento Header com o atributo
mustUnderstand=“1” não foi entendido
Error:
Client
Description: A mensagem foi formada incorretamente ou contém
informações incorretas
Error:
Server
Description:
processada
Problemas com o servidor. Mensagem não pode ser
Ligação SOAP + HTTP
Requisição HTTP
POST /item HTTP/1.1
Host: 189.123.345.239
Content-Type: text/plain
Content-Length: 200
Uma requisição SOAP é uma requisição HTTP que usa
o padrão de request/response definido pelas regras
de codificação SOAP
HTTP + XML = SOAP
Uma requisição SOAP pode ser feita através de POST
ou GET
Ligação SOAP + HTTP
POST /InStock HTTP/1.1
Host: www.stock.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.stock.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope
Exemplo de uma requisição
Ligação SOAP + HTTP
HTTP/1.1 200 OK
Content-Type: application/soap; 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.stock.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
Exemplo de resposta da requisição
Download

SOAP