Post

SOAP, UDDI e WSDL

SOAP, UDDI e WSDL

Tecnologias utilizadas para construção de serviços web

Três tecnologias são bastante utilizadas na construção de serviços web: SOAP, UDDI e WSDL.

Simple Object Access Protocol (SOAP)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0"?>
<!-- Exemplo de SOAP -->

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

SOAP significa: Simple Object Access Protocol, uma tradução simples SOAP significa: Protocolo Simples de acesso a objetos. SOAP é um protocolo a nível de aplicação baseado em XML e agnóstico de sistemas operacionais e qualquer outra plataforma. A sua adoção é recomenda pela W3C.

Partes do SOAP

Um SOAP deve conter obrigatoriamente as seguintes tags: <soap:Envelope>, <soap:Body>. Em caso de erro o provedor do serviço pode opcionalmente utilizar a tag <soap:Fault> para informar o ocorrido. O provedor do serviço também pode, opcionalmente, enviar informações especificas do serviço através da tag <soap:Header>.

  • A tag <soap:Envelope> é utilizada para sinalizar que o conteúdo da mensagem é um SOAP.

  • A tag <soap:Body> possui em seu conteúdo informações relativas a chamada do serviço.

  • A tag <soap:Fault> está contido dentro do body e possui informações relacionadas a algum erro.

  • A tag <soap:Header> contem dados específicos do serviço, se o serviço for de autenticação então no header pode conter o token de acesso.

Universal Description, Discovery and Integration (UDDI)

Universal Description, Discovery and Integration é um serviço de diretório onde organizações podem registrar, buscar serviços Web. Um serviço de registro, gerencia informação sobre provedores de serviços, implementações e metadados dos provedores. Um serviço de registro deve fornecer uma interface para que provedores possam publicar o seus serviços e cliente de serviços possa descobrir serviços.

Categorias do UDDI

UDDI descreve três categorias:

  • páginas brancas: descrevem a organização como: nome, endereço contatos
  • páginas amarelas: incluem as categorias, baseada em taxonomias padrões.
  • páginas verdes: descrevem a interface para o serviço em nível de detalhe suficiente para se escrever uma aplicação possa usá-la

Web Services Description Language (WSDL)

Web services description language ou linguagem de descrição de serviços web é uma linguagem baseada em XML que permite com que os serviços web disponibilizem acesso a suas informações de forma padronizada e organizada.

Partes do WSDL

WSDL possui 6 tags imporantes: types, message, portType, binding, operation, definitions:

  • <wsdl:types>: É utilizado para informar os tipos de dados suportados pelo provedor do serviço.

  • <wsdl:message>: Contém as informações dos padrões de entrada e saída dos dados do provedor do serviço.

  • <wsdl:portType>: Contém as operações executadas pelo provedor do serviço.

  • <wsdl:binding>: Contém as Informações sobre o protocolo de comunicação a ser utilizado com o provedor do serviço.

  • <wsdl:operation>: Contém as assinaturas dos métodos disponibilizados pelo provedor do serviço.

  • <wsdl:definitions>: utilizada para sinalizar que o conteúdo da mensagem é um WSDL

Um exemplo de WSDL para para Calculadora pode ser encontrada abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<!-- Exemplo de um WSDL de um serviço de calculadora -->
<wsdl:definitions
  xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:wsu="https://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
  xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/"
  xmlns:tns="https://Example.org"
  xmlns:wsa="https://schemas.xmlsoap.org/ws/2004/08/addressing"
  xmlns:wsp="https://schemas.xmlsoap.org/ws/2004/09/policy"
  xmlns:wsap="https://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
  xmlns:xsd="https://www.w3.org/2001/XMLSchema"
  xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
  xmlns:wsaw="https://www.w3.org/2006/05/addressing/wsdl"
  xmlns:soap12="https://schemas.xmlsoap.org/wsdl/soap12/"
  xmlns:wsa10="https://www.w3.org/2005/08/addressing"
  xmlns:wsx="https://schemas.xmlsoap.org/ws/2004/09/mex" targetNamespace="https://Example.org"
  xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <xsd:schema targetNamespace="https://Example.org" elementFormDefault="qualified" >
  <xsd:element name="Add">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" name="a" type="xsd:int" />
        <xsd:element minOccurs="0" name="b" type="xsd:int" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="AddResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" name="result" type="xsd:int" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Subtract">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" name="a" type="xsd:int" />
        <xsd:element minOccurs="0" name="b" type="xsd:int" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SubtractResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" name="result" type="xsd:int" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="ICalculator_Add_InputMessage">
    <wsdl:part name="parameters" element="tns:Add" />
  </wsdl:message>
  <wsdl:message name="ICalculator_Add_OutputMessage">
    <wsdl:part name="parameters" element="tns:AddResponse" />
  </wsdl:message>
  <wsdl:message name="ICalculator_Subtract_InputMessage">
    <wsdl:part name="parameters" element="tns:Subtract" />
  </wsdl:message>
  <wsdl:message name="ICalculator_Subtract_OutputMessage">
    <wsdl:part name="parameters" element="tns:SubtractResponse" />
  </wsdl:message>
  <wsdl:portType name="ICalculator">
    <wsdl:operation name="Add">
      <wsdl:input wsaw:Action="https://Example.org/ICalculator/Add" message="tns:ICalculator_Add_InputMessage" />
      <wsdl:output wsaw:Action="https://Example.org/ICalculator/AddResponse" message="tns:ICalculator_Add_OutputMessage" />
    </wsdl:operation>
    <wsdl:operation name="Subtract">
      <wsdl:input wsaw:Action="https://Example.org/ICalculator/Subtract" message="tns:ICalculator_Subtract_InputMessage" />
      <wsdl:output wsaw:Action="https://Example.org/ICalculator/SubtractResponse" message="tns:ICalculator_Subtract_OutputMessage" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="DefaultBinding_ICalculator" type="tns:ICalculator">
    <soap:binding transport="https://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="Add">
      <soap:operation soapAction="https://Example.org/ICalculator/Add" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="Subtract">
      <soap:operation soapAction="https://Example.org/ICalculator/Subtract" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="CalculatorService">
        <wsdl:port name="ICalculator" binding="tns:DefaultBinding_ICalculator">
            <soap:address location="https://Example.org/ICalculator" />
        </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Referências

W3Schools XML Soap
WSDL Example
O que é WSDL (Web Services Description Language)?
Web Services e Arquitetura Orientada a Serviços

This post is licensed under CC BY 4.0 by the author.