Upload
internet
View
107
Download
1
Embed Size (px)
Citation preview
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
Serviço
Converte msg SOAP a tipo de dado e invoca o serviço.
Converte resultado da operação a msg SOAP e envia msg.
Plataforma de Serviço na Web
Servidor SOAP
Cliente SOAP
SOAPrequest
SOAPresponse
Arquitetura
SOAP 1.2Dividido 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 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 Envelope
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/soap- envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap- encoding"> <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: Problemas com o servidor. Mensagem não pode ser processada
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
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
Ligação SOAP + HTTP