Simple Object Access Protocol (SOAP)

Simple Object Access Protocol (SOAP)

Definição

É uma especificação de protocolo de mensagens para troca de informações estruturadas em um ambiente descentralizado e distribuído. Sua finalidade é fornecer extensibilidade, neutralidade e independência. Ele usa o XML para seu formato de mensagem e se baseia nos protocolos da camada de aplicação na maioria das vezes o Hypertext Transfer Protocol (HTTP) para negociação e transmissão de mensagens.

Definição

Permite que processos executados em sistemas operacionais diferentes (como Windows e Linux) se comuniquem usando XML (Extensible Markup Language). Como os protocolos da Web (HTTP, SMTP, etc), são instalados e executados em todos os sistemas operacionais, o SOAP permite que os clientes invoquem web services e recebam respostas independentemente das linguagens de programação e da plataforma.

Vantagens

  • A característica de neutralidade do SOAP o torna adequado para uso com qualquer protocolo de transporte. Implementações geralmente usam HTTP, mas outros protocolos de transporte populares podem ser usados. Por exemplo, o SOAP também pode ser usado em SMTP, JMS e filas de mensagens.

Vantagens

  • Quando combinado com o protocolo HTTP, consequentemente não exige a modificação das infraestruturas de computação e comunicação existentes.

  • Utiliza XML dessa forma incluindo todas as suas vantagens como por exemplo fácil internacionalização e extensibilidade com XML Namespaces.

Desvantagens

  • A verbosidade do protocolo, a velocidade de análise lenta do XML e a falta de um modelo de interação padronizado levaram à dominação no campo por serviços que usam o protocolo HTTP mais diretamente como o REST.

Especificação

  • SOAP processing model: define as regras para processar uma SOAP message.

  • SOAP extensibility model: define o modelo de extensão com o conceitos de SOAP features e SOAP modules.

Especificação

  • SOAP underlying protocol binding: estrutura descrevendo as regras para definir uma ligação a um protocolo subjacente que pode ser usado para trocar SOAP messages entre SOAP nodes

  • SOAP message construct: definindo a estrutura de uma SOAP message

Conceitos

soapnode

Conceitos do protocolo

  • SOAP: O conjunto de regras que formaliza e rege o formato e as regras de processamento de informações trocadas entre um SOAP sender e um SOAP receiver.

  • SOAP nodes: São máquinas físicas ou lógicas com unidades de processamento que são usadas para encaminhar, receber e processar mensagens SOAP. Estes são análogos aos nós de rede.

Conceitos do protocolo

  • SOAP role: No SOAP message path, todos os nodes assumem uma role específica. A role do node define a ação que será executa na mensagem que ele recebe de acordo com o SOAP header.

Conceitos do protocolo

  • SOAP binding: Uma mensagem SOAP precisa trabalhar em conjunto com outros protocolos para serem transferidos através de uma rede. Por exemplo, uma mensagem SOAP pode usar o TCP como um protocolo de camada inferior para transferir mensagens. Essas ligações são definidas na SOAP protocol binding framework.

Conceitos do protocolo

  • SOAP feature: SOAP fornece apenas uma estrutura de mensagens. No entanto, ele pode ser estendido para adicionar recursos como confiabilidade, segurança, etc. Há regras a serem seguidas ao adicionar recursos à estrutura SOAP.

Conceitos do protocolo

  • SOAP module: É uma especificação que contem a combinação da sintaxe e semântica de um ou mais SOAP header para descrever quaisquer novos features sendo estendidos no SOAP. Um module precisa realizar zero ou mais features. O SOAP exige que os modules sigam as regras prescritas.

Conceitos do protocolo

  • SOAP message exchange pattern (MEP): Template para a troca de SOAP messages entre SOAP nodes que é possibilitado pelo SOAP protocol bindings.

  • SOAP application: Uma entidade, tipicamente de software, que produz, consume ou age em SOAP messages em conformidade com o SOAP processing model.

Conceitos de encapsulamento de dados

  • SOAP message: Representa as informações trocadas entre 2 SOAP nodes.

  • SOAP envelope: É o elemento envolvente de uma mensagem XML identificando-a como SOAP message.

Conceitos de encapsulamento de dados

  • SOAP header: Uma coleção de zero ou mais SOAP header blocks cada qual pode ser selecionado por qualquer SOAP receiver dentro do SOAP message path.

Conceitos de encapsulamento de dados

  • SOAP header block: Um SOAP header pode conter mais de um desses blocos, cada um sendo um bloco computacional discreto dentro do header. Em geral, as informações do SOAP role são usadas para segmentar nodes no caminho (message path). Um header block é direcionado a um ou mais SOAP nodes se a header block tiver o mesmo nome que uma rolo na qual o node opera.

Conceitos de encapsulamento de dados

  • SOAP body: Contém o corpo da mensagem destinada ao SOAP receiver. A interpretação e o processamento do SOAP body são definidos pelos header block.

Conceitos de encapsulamento de dados

  • SOAP fault: No caso de um SOAP node falhar ao processar uma SOAP message, ele incluirá as informações de falha no elemento de falha SOAP. Esse elemento está contido no SOAP body como um elemento filho.

Conceitos dos remetente e destinatário da mensagem

  • SOAP sender: O SOAP node que transmite uma SOAP message.

  • SOAP receiver: O SOAP node que está recebendo uma SOAP message.

Conceitos dos remetente e destinatário da mensagem

  • SOAP message path: O caminho que consiste em todos os nodes que a SOAP message atravessou para alcançar o node de destino.

  • Initial SOAP sender: Este é o node que originou a SOAP message a ser transmitida. Esta é a raiz do SOAP message path.

Conceitos dos remetente e destinatário da mensagem

  • SOAP intermediary: todos os nós entre o Initial SOAP sender e o destino SOAP pretendido. Ele processa os SOAP header blocks direcionados a ele e age para encaminhar uma SOAP message em direção a um Ultimate SOAP receiver.

Conceitos dos remetente e destinatário da mensagem

  • Ultimate SOAP receiver: O receptor de destino da SOAP message. Este node é responsável por processar o body da message e quaisquer header blocks direcionados a ele.

SOAP Message (HTTP)

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299
SOAPAction: "http://www.w3.org/2003/05/soap-envelope"

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:m="http://www.example.org">
  <soap:Header>
  </soap:Header>
  <soap:Body>
    <m:GetStockPrice>
      <m:StockName>GOOG</m:StockName>
    </m:GetStockPrice>
  </soap:Body>
</soap:Envelope>

Web Services Description Language (WSDL)

Definição

É uma linguagem de descrição de interface baseada em XML que é usada para descrever a funcionalidade oferecida por um serviço da Web.

O WSDL é frequentemente usado em combinação com o SOAP e um XML Schema para fornecer serviços da Web pela Internet.

Conceitos

wsdl

Conceitos

  • Service: Contém um conjunto de funções de sistema que são expostas utilizando protocolos Web.

  • Port/Endpoint: Determina os endereços ou pontos de conexão a um web service. É geralmente representada por uma HTTP URL string.

Conceitos

  • Binding: Especifica a interface e define o SOAP binding style (RPC/Document) e o SOAP transport (SOAP Protocol). Ela também define as operações suportadas.

  • PortType/Interface: Define um Web service, as operações que podem ser executadas,e as mensagens que são usadas para executar a operação.

Conceitos

  • Operation: Define as SOAP actions e o modo como a mensagem é codificada. Uma operação é como um método ou função em estilos tradicionais de programação.

Conceitos

  • Message: Determinar os dados que serão trocados entre o provedor do web service e seus consumidores. A mensagem contem as informações necessárias para executar a operação e os dados que serão retornados para o consumidor.

  • Types: Definem os tipos de dados que serão utilizados nos web services. A XML Schema language (XSD) é usada para esse propósito.

Contract-first

Ao usar contrato primeiro, você começa com a definição das interfaces do artefato de software (o contrato WSDL, XSD nesse caso) e gera o código fonte com a implementação do contrato.

Contract-last

Ao usar uma abordagem de contrato por último, você começa com o código fonte e gerada o contrato de serviço da Web (WSDL) a partir do código.

Contract-first versus Contract-last

  • Fragilidade: O uso de geradores em objetos de código podem gerar WSDL diferentes caso alguma mudança seja realizada no código fonte. Além disso geradores diferentes podem gerar WSDL diferentes.

  • Performance: A geração automática do WSDL nem sempre leva em consideração performance da deserialização/serialização de objetos. O uso do Contract-first possibilita a criação de WSDL e XSD otimizados.

Contract-first versus Contract-last

  • Reusabilidade: A criação dos WSDL e XML Schemas permite que eles possam ser reutilizados, no lugar de serem gerados toda ves que a aplicação mudar.

  • Versionamento: Mesmo que um contrato deve permanecer imutável pelo maior período de tempo possível, as vezes eles precisam mudar. O uso do Contract-first permite o desacoplamento entre contrato e implementação.

Exemplo (WSDL)

<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://www.w3.org/ns/wsdl"
             xmlns:tns="http://www.tmsws.com/wsdl20sample"
             xmlns:whttp="http://schemas.xmlsoap.org/wsdl/http/"
             xmlns:wsoap="http://schemas.xmlsoap.org/wsdl/soap/"
             targetNamespace="http://www.tmsws.com/wsdl20sample">

<documentation>
    This is a sample WSDL 2.0 document.
</documentation>

<!-- Abstract type -->
   <types>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns="http://www.tmsws.com/wsdl20sample"
                targetNamespace="http://www.example.com/wsdl20sample">

         <xs:element name="request"> ... </xs:element>
         <xs:element name="response"> ... </xs:element>
      </xs:schema>
   </types>

<!-- Abstract interfaces -->
   <interface name="Interface1">
      <fault name="Error1" element="tns:response"/>
      <operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">
         <input messageLabel="In" element="tns:request"/>
         <output messageLabel="Out" element="tns:response"/>
      </operation>
   </interface>

<!-- Concrete Binding Over HTTP -->
   <binding name="HttpBinding" interface="tns:Interface1"
            type="http://www.w3.org/ns/wsdl/http">
      <operation ref="tns:Get" whttp:method="GET"/>
   </binding>

<!-- Concrete Binding with SOAP-->
   <binding name="SoapBinding" interface="tns:Interface1"
            type="http://www.w3.org/ns/wsdl/soap"
            wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
            wsoap:mepDefault="http://www.w3.org/2003/05/soap/mep/request-response">
      <operation ref="tns:Get" />
   </binding>

<!-- Web Service offering endpoints for both bindings-->
   <service name="Service1" interface="tns:Interface1">
      <endpoint name="HttpEndpoint"
                binding="tns:HttpBinding"
                address="http://www.example.com/rest/"/>
      <endpoint name="SoapEndpoint"
                binding="tns:SoapBinding"
                address="http://www.example.com/soap/"/>
   </service>
</description>

XML Schema Definition (XSD)

Definição

XSD (XML Schema Definition), uma recomendação do World Wide Web Consortium (W3C), especifica como descrever formalmente os elementos em um documento XML (Extensible Markup Language).

Tecnicamente, um esquema é uma coleção abstrata de metadados, consistindo em um conjunto de componentes do esquema.

Componentes do Schema

  • Element declarations: definem as propriedades dos elementos. Estes incluem o nome do elemento e o espaço de nomes de destino. Uma propriedade importante é o tipo do elemento, que restringe quais atributos e filhos que o elemento pode ter.

Componentes do Schema

  • Attribute declarations: definem propriedades de atributos. Novamente, as propriedades incluem o nome do atributo e o espaço de nomes de destino. O tipo de atributo restringe os valores que o atributo pode assumir. Uma declaração de atributo também pode incluir um valor padrão ou um valor fixo.

Componentes do Schema

Elementos podem ter tipos simples ou complexos:

  • Complex types: tipos complexos são elementos que são compostos por outros elementos e atributos.

  • Simple types: tipos simples são elementos com valores finais.

Componentes do Schema

  • Model group and attribute group definitions: grupos nomeados de elementos e atributos que podem ser reutilizados em muitas definições de tipos diferentes.

Tipos Primitivos

  1. anyURI

  2. base64Binary

  3. boolean

  4. date

  5. dateTime

  6. decimal

  7. double

  1. duration

  2. float

  3. hexBinary

  4. gDay

  5. gMonth

  6. gMonthDay

  7. gYear

  1. gYearMonth

  2. NOTATION

  3. QName

  4. string

  5. time

Exemplo XML

<?xml version="1.0" encoding="UTF-8"?>

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
  <orderperson>John Smith</orderperson>
  <shipto>
    <name>Ola Nordmann</name>
    <address>Langgt 23</address>
    <city>4000 Stavanger</city>
    <country>Norway</country>
  </shipto>time
  <item>
    <title>Empire Burlesque</title>
    <note>Special Edition</note>
    <quantity>1</quantity>
    <price>10.90</price>
  </item>
  <item>
    <title>Hide your heart</title>
    <quantity>1</quantity>
    <price>9.90</price>
  </item>
</shiporder>

Exemplo XSD

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="orderperson" type="xs:string"/>
      <xs:element name="shipto">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="address" type="xs:string"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="country" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="item" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="note" type="xs:string" minOccurs="0"/>
            <xs:element name="quantity" type="xs:positiveInteger"/>
            <xs:element name="price" type="xs:decimal"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="orderid" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>

</xs:schema>

SOAP Message Security specification (WSS)

É uma extensão do SOAP para aplicar segurança a serviços da Web. O protocolo especifica como a integridade e a confidencialidade podem ser aplicadas em mensagens permitindo a comunicação com vários formatos de token de segurança, como SAML (Security Assertion Markup Language), Kerberos e X.509. Seu foco principal é o uso de XML Signature e XML Encryption para fornecer segurança de ponta a ponta.

Especificação

É construído por:

  • Como assinar mensagens SOAP para garantir a integridade.

  • Como criptografar mensagens SOAP para garantir a confidencialidade.

  • Como anexar tokens de segurança para determinar a identidade do remetente.

Especificação

A especificação permite uma variedade de formatos de assinatura, algoritmos de criptografia e vários domínios de confiança e está aberta a vários modelos de token de segurança, como:

  1. X.509 certificates

  2. Kerberos tickets

  3. SAML Assertions

  1. Tokens Customizados

  2. User ID/Password credentials

Exemplo

<WSS:Envelope xmlns:WSS="..." xmlns:wsse="...">
        <WSS:Header>
                ...
                <wsse:Security>
                        <wsse:UsernameToken>
                                <wsse:Username>Zoe</wsse:Username>
                                <wsse:Password>IloveDogs</wsse:Password>
                        </wsse:UsernameToken>
                </wsse:Security>
                ...
        </WSS:Header>
        ...
</WSS:Envelope>