Tutorial sobre Serviços Web SOAP: O que é o Protocolo SOAP?
⚡ Resumo Inteligente
SOAP (Simple Object Access Protocol) é um protocolo baseado em XML para acessar serviços web via HTTP. Este recurso explica os componentes básicos do SOAP, a estrutura da mensagem, os elementos de envelope e de falha, o modelo de comunicação e um exemplo prático de serviço web ASMX.
O que é SABÃO?
SOAP é um protocolo baseado em XML para acessar serviços web via HTTP. Possui algumas especificações que podem ser utilizadas em diversas aplicações.
SOAP é conhecido como Simple Object Access Protocol, mas posteriormente foi abreviado para SOAP v1.2. SOAP é um protocolo ou, em outras palavras, uma definição de como os serviços web se comunicam entre si ou com os aplicativos cliente que os invocam.
SOAP foi desenvolvido como uma linguagem intermediária para que aplicativos construídos em diversas linguagens de programação pudessem se comunicar facilmente entre si e evitar o esforço extremo de desenvolvimento.
Introdução ao SOAP
No mundo atual, existe um grande número de aplicativos construídos em diferentes linguagens de programação. Por exemplo, pode haver um aplicativo web desenvolvido em Java, outro em .Net e outro em PHP.
A troca de dados entre aplicativos é crucial no mundo conectado de hoje. Mas a troca de dados entre estas aplicações heterogéneas seria complexa. Assim será a complexidade do código para realizar essa troca de dados.
Um dos métodos utilizados para combater essa complexidade é utilizar XML (Extensible Markup Language) como linguagem intermediária para troca de dados entre aplicações.
Toda linguagem de programação pode compreender a linguagem de marcação XML. Conseqüentemente, o XML foi usado como meio subjacente para troca de dados.
Mas não existem especificações padrão para o uso de XML em todas as linguagens de programação para troca de dados. É aí que entra o software SOAP.
SOAP foi projetado para funcionar com XML sobre HTTP e possui algum tipo de especificação que pode ser usada em todos os aplicativos. Veremos mais detalhes sobre o protocolo SOAP nos capítulos subsequentes.
Vantagens do SOAP
SOAP é o protocolo usado para intercâmbio de dados entre aplicativos. Abaixo estão algumas das razões pelas quais o SOAP é usado.
- Quando desenvolveping Para que os serviços web sejam baseados em SOAP, é necessário utilizar uma linguagem que permita a comunicação entre os serviços web e as aplicações cliente. O SOAP é a solução ideal, desenvolvida justamente para esse propósito. Esse protocolo também é recomendado pelo consórcio W3C, órgão que rege todos os padrões da web.
- SOAP é um protocolo leve usado para intercâmbio de dados entre aplicativos. Observe a palavra-chave 'leveComo a programação SOAP é baseada na linguagem XML, que por sua vez é uma linguagem leve para intercâmbio de dados, o SOAP, como protocolo, também se enquadra na mesma categoria.
- O SOAP foi projetado para ser independente de plataforma e também de sistema operacional. Portanto, o protocolo SOAP pode funcionar com aplicativos baseados em qualquer linguagem de programação, tanto em sistemas operacionais quanto em sistemas operacionais. Windows e Linux .
- Ele funciona com o protocolo HTTP – o SOAP funciona com o protocolo HTTP, que é o protocolo padrão usado por todos os aplicativos da web. Portanto, não é necessário nenhum tipo de personalização para que os serviços da web construídos com o protocolo SOAP funcionem na World Wide Web.
Blocos de construção SOAP
A especificação SOAP define algo conhecido como “mensagem SOAP“, que é o que é enviado para o serviço web e para o aplicativo cliente.
O diagrama abaixo da arquitetura SOAP mostra os vários blocos de construção de uma mensagem SOAP.
A mensagem SOAP nada mais é do que um mero documento XML que possui os componentes abaixo.
- An Envelope Elemento que identifica o documento XML como uma mensagem SOAP – Esta é a parte que contém a mensagem SOAP e é usada para encapsular todos os detalhes da mensagem SOAP. Este é o elemento raiz da mensagem SOAP.
- A cabeçalho Elemento que contém informações de cabeçalho – O elemento de cabeçalho pode conter informações como credenciais de autenticação que podem ser usadas pelo aplicativo que faz a chamada. Ele também pode conter a definição de tipos complexos que podem ser usados na mensagem SOAP. Por padrão, a mensagem SOAP pode conter parâmetros que podem ser de tipos simples, como strings e números, mas também podem ser de um tipo de objeto complexo.
Abaixo, é apresentado um exemplo simples de um serviço SOAP de um tipo complexo. Suponha que desejássemos enviar um tipo de dados estruturado que contivesse uma combinação de um "Nome do Tutorial" e um "Tutorial". DescriptSe o elemento for um íon, então definiríamos o tipo complexo como mostrado abaixo. O tipo complexo é definido pela tag do elemento. Todos os elementos necessários da estrutura, juntamente com seus respectivos tipos de dados, são então definidos na coleção de tipos complexos.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
A Corpo Elemento que contém informações de chamada e resposta – Este elemento contém os dados reais que precisam ser enviados entre o serviço web e o aplicativo que faz a chamada. Abaixo, um exemplo de serviço web SOAP com o corpo SOAP que funciona com o tipo complexo definido na seção de cabeçalho. Aqui está a resposta do Nome do Tutorial e do Tutorial. Descriptíon que é enviado para o aplicativo de chamada que chama esse serviço da web.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
Estrutura da mensagem SOAP
Uma coisa a observar é que as mensagens SOAP normalmente são geradas automaticamente pelo serviço web quando ele é chamado.
Sempre que uma aplicação cliente chamar um método no serviço web, o serviço web irá gerar automaticamente uma mensagem SOAP que conterá os detalhes necessários dos dados que serão enviados do serviço web para a aplicação cliente.
Conforme discutido no tópico anterior deste tutorial sobre SOAP, uma mensagem SOAP simples possui os seguintes elementos:
- O elemento Envelope
- O elemento de cabeçalho e
- O elemento corporal
- O elemento Fault (opcional)
Vejamos abaixo um exemplo de uma mensagem SOAP simples e observemos a função de cada elemento.

- Como pode ser visto na mensagem SOAP acima, a primeira parte da mensagem SOAP é o elemento do envelope que é usado para encapsular toda a mensagem SOAP.
- O próximo elemento é o corpo SOAP que contém os detalhes da mensagem real.
- Nossa mensagem contém um serviço web cujo nome é “Guru99WebService”.
- O "GuruO serviço "99Webservice" aceita um parâmetro do tipo 'int' e tem o nome de TutorialID.
Agora, a mensagem SOAP acima será passada entre o serviço web e a aplicação cliente.
Você pode ver como as informações acima são úteis para o aplicativo cliente. A mensagem SOAP informa ao aplicativo cliente o nome do serviço web, os parâmetros esperados e o tipo de cada parâmetro recebido pelo serviço web.
Elemento de envelope SOAP
A primeira parte do bloco de construção é o Envelope SOAP.
O Envelope SOAP é usado para encapsular todos os detalhes necessários das mensagens SOAP, que são trocadas entre o serviço web e a aplicação cliente.
O elemento envelope SOAP é usado para indicar o início e o fim de uma mensagem SOAP. Isso permite que o aplicativo cliente que chama o serviço da Web saiba quando a mensagem SOAP termina.
Os seguintes pontos podem ser observados no elemento envelope SOAP.
- Toda mensagem SOAP precisa ter um elemento Envelope raiz. É absolutamente obrigatório que uma mensagem SOAP tenha um elemento Envelope.
- Cada elemento Envelope precisa ter pelo menos um elemento de corpo de sabão.
- Se um elemento Envelope contiver um elemento de cabeçalho, ele não deverá conter mais de um e deverá aparecer como o primeiro filho do Envelope, antes do elemento body.
- O envelope muda quando as versões SOAP mudam.
- Um processador SOAP compatível com v1.1 gera uma falha ao receber uma mensagem contendo o namespace do envelope v1.2.
- Um processador SOAP compatível com v1.2 gera uma falha de incompatibilidade de versão se receber uma mensagem que não inclua o namespace do envelope v1.2.
Abaixo, segue um exemplo da API SOAP da versão 1.2 do elemento de envelope SOAP.
<?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body> <Guru99WebService xmlns="http://tempuri.org/"> <TutorialID>int</TutorialID> </Guru99WebService> </soap:Body> </SOAP-ENV:Envelope>
A mensagem de falha
Quando uma requisição é feita a um serviço web SOAP, a resposta retornada pode ser de duas formas: uma resposta de sucesso ou uma resposta de erro. Quando a requisição é bem-sucedida, a resposta do servidor será sempre uma mensagem SOAP. Mas se ocorrerem falhas SOAP, elas serão retornadas como erros "HTTP 500".
A mensagem de falha SOAP consiste nos seguintes elementos.
- <faultCode> – Este é o código que designa o código do erro. O código de falha pode ser qualquer um dos valores abaixo:
- SOAP-ENV:VersionMismatch – ocorre quando um namespace inválido para o elemento SOAP Envelope é encontrado.
- SOAP-ENV:MustUnderstand – Um elemento filho imediato do elemento Header, com o atributo mustUnderstand definido como “1”, não foi compreendido.
- SOAP-ENV:Client – A mensagem foi formada incorretamente ou continha informações incorretas.
- SOAP-ENV:Servidor – Houve um problema com o servidor, portanto a mensagem não pôde prosseguir.
- – Esta é a mensagem de texto que fornece uma descrição detalhada do erro.
- (Opcional) – Esta é uma sequência de texto que indica quem causou a falha.
- (Opcional) – Este é o elemento para mensagens de erro específicas do aplicativo. Portanto, o aplicativo pode ter uma mensagem de erro específica para diferentes cenários de lógica de negócios.
Exemplo de mensagem de falha
Segue abaixo um exemplo de mensagem de erro. O erro é gerado quando o cliente tenta usar um método chamado TutorialID na classe GetTutorial. A mensagem de erro abaixo é gerada caso o método não exista na classe definida.
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> <faultstring xsi:type="xsd:string"> Failed to locate method (GetTutorialID) in class (GetTutorial) </faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Saída:
Ao executar o código acima, será exibido o erro "Falha ao localizar o método (GetTutorialID) na classe (GetTutorial)".
Modelo de comunicação SOAP
Toda a comunicação via SOAP é feita através do protocolo HTTP. Antes do SOAP, muitos serviços web usou o estilo RPC (Remote Procedure Call) padrão para comunicação. Esse era o tipo de comunicação mais simples, mas tinha muitas limitações.
Neste tutorial sobre a API SOAP, vamos analisar o diagrama abaixo para entender como essa comunicação funciona. Neste exemplo, vamos supor que o servidor hospeda um serviço web que oferece dois métodos:
- ObterEmployee – Isso obterá todos os detalhes do funcionário.
- DefinirEmployee – Isso definiria o valor de detalhes como o departamento, o salário, etc., de um funcionário, de acordo com a situação.
Na comunicação normal do estilo RPC, o cliente apenas chamaria os métodos em sua solicitação e enviaria os parâmetros necessários ao servidor, e o servidor enviaria então a resposta desejada.
O modelo de comunicação acima apresenta as seguintes limitações graves:
- Não é independente de idioma – O servidor que hospeda os métodos estaria em uma linguagem de programação específica e, normalmente, as chamadas para o servidor seriam feitas somente nessa linguagem de programação.
- Não é o protocolo padrão – Quando é feita uma chamada para o procedimento remoto, a chamada não é realizada através do protocolo padrão. Isso era um problema, já que quase toda a comunicação pela web tinha que ser feita por meio do protocolo HTTP.
- firewalls – Como as chamadas RPC não passam pelo protocolo normal, portas separadas precisam ser abertas no servidor para permitir que o cliente se comunique com o servidor. Normalmente, todos os firewalls bloqueariam esse tipo de tráfego, e geralmente era necessária muita configuração para garantir que esse tipo de comunicação entre o cliente e o servidor funcionasse.
Para superar todas as limitações citadas acima, o SOAP utilizaria então o modelo de comunicação abaixo.
- O cliente formataria as informações referentes à chamada do procedimento e quaisquer argumentos em uma mensagem SOAP e a enviaria ao servidor como parte de uma solicitação HTTP. Esse processo de encapsulamento dos dados em uma mensagem SOAP era conhecido como Marshallagem.
- O servidor então desembrulharia a mensagem enviada pelo cliente, verificaria o que o cliente solicitou e, em seguida, enviaria a resposta apropriada de volta ao cliente como uma mensagem SOAP. A prática de desembrulharping Uma solicitação enviada pelo cliente é conhecida como Desmobilização.
Exemplo prático de SOAP
Agora neste SoapUI Neste tutorial, vejamos um exemplo prático de SOAP. Provavelmente, uma das melhores maneiras de entender como as mensagens SOAP são geradas é observar um serviço web em funcionamento.
Este tópico examinará o uso do MicrosoftFramework .Net para construir um serviço web ASMX. Este tipo de serviço web suporta SOAP versão 1.1 e versão 1.2.
Os serviços da web ASMX geram automaticamente o Linguagem de definição de serviço da Web (WSDL) documento. Este documento WSDL é exigido pelo aplicativo cliente chamador para que o aplicativo saiba o que o serviço da web é capaz de fazer.
Em nosso exemplo, vamos criar um serviço web simples, que será usado para retornar uma string para a aplicação que o invoca. Este serviço web será hospedado em um servidor web. Asp.Net aplicativo da web. Em seguida, invocaremos o serviço web e veremos o resultado retornado pelo serviço web.
O Visual Studio também nos mostrará qual é a mensagem SOAP que está sendo transmitida entre o serviço web e o aplicativo que faz a chamada. O primeiro pré-requisito para configurar nosso aplicativo de serviço web pode ser atendido seguindo os passos abaixo. Certifique-se de ter o Visual Studio 2013 instalado em seu sistema para este exemplo.
Passo 1) A primeira etapa é criar um aplicativo Web ASP.Net vazio. No Visual Studio 2013, clique na opção de menu Arquivo->Novo projeto.
Ao clicar na opção Novo Projeto, o Visual Studio fornecerá outra caixa de diálogo para escolher o tipo de projeto e fornecer os detalhes necessários do projeto. Isso é explicado na próxima etapa.
Passo 2) Nesta etapa,
- Certifique-se de escolher primeiro o C# Modelo web de aplicação web ASP.NET. O projeto precisa ser deste tipo para que seja possível criar um projeto de serviços SOAP. Ao escolher esta opção, o Visual Studio executará os passos necessários para adicionar os arquivos requeridos por qualquer aplicação web.
- Dê um nome ao seu projeto, que no nosso caso foi definido como webservice.asmx. Em seguida, certifique-se de indicar o local onde os arquivos do projeto serão armazenados.
Após a conclusão, você verá o arquivo de projeto criado no explorador de soluções do Visual Studio 2013.
Passo 3) Nesta etapa, vamos adicionar um arquivo de serviço Web ao nosso projeto.
- Primeiro, clique com o botão direito do mouse no arquivo do projeto, como mostrado abaixo.
- Ao clicar com o botão direito do mouse no arquivo do projeto, você terá a opção "Adicionar -> Serviço Web (ASMX)" para adicionar um arquivo de serviço web. Basta fornecer o nome "Tutorial Service" para o arquivo de serviço web.
Passo 4) Adicione o código a seguir ao arquivo asmx do Tutorial Service.
Code Explicação:
- Esta linha de código fornece um nome para seu arquivo de serviço da web. Esta é uma etapa importante porque permite que o aplicativo cliente chame o serviço web por meio do nome do serviço web.
- Normalmente, um arquivo de classe é usado para encapsular a funcionalidade de um serviço web. Assim o arquivo de classe terá a definição de todos os métodos web que irão fornecer alguma funcionalidade à aplicação cliente.
- Aqui, [WebMethod] é conhecido como um atributo que descreve uma função. A etapa subsequente cria uma função chamada “Guru99WebService”, mas com a inclusão desta etapa de adicionar um atributo [WebMethod], garante-se que este método possa ser invocado por um aplicativo cliente. Se este atributo não estiver presente, o método nunca poderá ser chamado por um aplicativo cliente.
- Aqui estamos definindo uma função chamada 'Guru99WebService', que será usada para retornar uma string para o aplicativo cliente que a invocou. Essa função é um serviço web que pode ser chamado por qualquer aplicativo cliente.
- Estamos usando a instrução `return` para retornar a string “This is a Guru99 Serviço Web” para o aplicativo cliente.
Se o código for executado com sucesso, a seguinte saída será mostrada quando você executar o código no navegador.
Saída:
- O resultado mostra claramente que o nome do nosso serviço web é “Guru"99 Web Service", que é o resultado de termos escolhido um nome para o nosso serviço web.
- Também podemos ver que é possível invocar o serviço web. Se clicarmos no botão "Invocar", receberemos a seguinte resposta no navegador.
O resultado acima:
- Isso demonstra claramente que, ao invocar o método web, a string “This is a Guru99 Serviço Web” é retornado.
- O Visual Studio também permite visualizar a solicitação e a resposta da mensagem SOAP que é gerada quando o serviço da Web acima é chamado.
A solicitação SOAP gerada quando o serviço web é chamado é mostrada abaixo.
Code Explicação:
- A primeira parte da mensagem SOAP é o elemento de envelope, que foi discutido nos capítulos anteriores. Este é o elemento encapsulador presente em todas as mensagens SOAP.
- O Corpo SOAP é o próximo elemento e contém os detalhes reais da mensagem SOAP.
- A terceira parte é o elemento que especifica que queremos chamar o serviço chamado 'Guru99WebService'.
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <Guru99WebServiceResponse xmlns="http://tempuri.org/"> <Guru99WebServiceResult>string</Guru99WebServiceResult> </Guru99WebServiceResponse> </soap:Body> </soap:Envelope>
Code Explicação:
- A primeira parte da mensagem SOAP é o elemento de envelope, que foi discutido nos capítulos anteriores. Este é o elemento encapsulador presente em todas as mensagens SOAP.
- O Corpo SOAP é o próximo elemento e contém os detalhes reais da mensagem SOAP.
- A parte interessante que você verá agora é o atributo 'string'. Ele informa ao aplicativo cliente que o serviço web chamado retorna um objeto do tipo string. Isso é muito útil, pois, caso contrário, o aplicativo cliente não saberia o que o serviço web retorna.














