WSDL - Guia Rápido

WSDL significa Web Services Description Language. É o formato padrão para descrever um serviço da web. WSDL foi desenvolvido em conjunto pela Microsoft e IBM.

Características do WSDL

  • WSDL é um protocolo baseado em XML para troca de informações em ambientes descentralizados e distribuídos.

  • As definições WSDL descrevem como acessar um serviço da web e quais operações ele executará.

  • WSDL é uma linguagem para descrever como fazer interface com serviços baseados em XML.

  • WSDL é parte integrante da Universal Description, Discovery, and Integration (UDDI), um registro de negócios mundial baseado em XML.

  • WSDL é a linguagem que o UDDI usa.

  • WSDL é pronunciado como 'wiz-dull' e soletrado como 'WSD-L'.

Uso WSDL

WSDL é freqüentemente usado em combinação com SOAP e XML Schema para fornecer serviços da web pela Internet. Um programa cliente que se conecta a um serviço da web pode ler o WSDL para determinar quais funções estão disponíveis no servidor. Quaisquer tipos de dados especiais usados ​​são incorporados ao arquivo WSDL na forma de esquema XML. O cliente pode então usar o SOAP para realmente chamar uma das funções listadas no WSDL.

História do WSDL

WSDL 1.1 foi submetido como uma nota W3C pela Ariba, IBM e Microsoft para descrever serviços para a atividade XML W3C em protocolos XML em março de 2001.

WSDL 1.1 não foi endossado pelo World Wide Web Consortium (W3C), no entanto, acaba de lançar um rascunho para a versão 2.0 que será uma recomendação (um padrão oficial) e, portanto, endossado pelo W3C.

WSDL divide os serviços da Web em três elementos específicos e identificáveis ​​que podem ser combinados ou reutilizados uma vez definidos.

Os três principais elementos do WSDL que podem ser definidos separadamente são -

  • Types
  • Operations
  • Binding

Um documento WSDL possui vários elementos, mas eles estão contidos nesses três elementos principais, que podem ser desenvolvidos como documentos separados e, em seguida, podem ser combinados ou reutilizados para formar arquivos WSDL completos.

Elementos WSDL

Um documento WSDL contém os seguintes elementos -

  • Definition- É o elemento raiz de todos os documentos WSDL. Ele define o nome do serviço da web, declara vários namespaces usados ​​no restante do documento e contém todos os elementos de serviço descritos aqui.

  • Data types - Os tipos de dados a serem usados ​​nas mensagens estão na forma de esquemas XML.

  • Message - É uma definição abstrata dos dados, na forma de uma mensagem apresentada como um documento inteiro ou como argumentos a serem mapeados para uma chamada de método.

  • Operation - É a definição abstrata da operação de uma mensagem, como nomear um método, fila de mensagens ou processo de negócios, que aceitará e processará a mensagem.

  • Port type- É um conjunto abstrato de operações mapeadas para um ou mais end-points, definindo a coleção de operações para uma ligação; a coleção de operações, por ser abstrata, pode ser mapeada para vários transportes por meio de várias ligações.

  • Binding - É o protocolo concreto e formatos de dados para as operações e mensagens definidas para um tipo de porta particular.

  • Port - É uma combinação de um endereço de ligação e de rede, fornecendo o endereço de destino da comunicação do serviço.

  • Service- É uma coleção de endpoints relacionados que abrangem as definições de serviço no arquivo; os serviços mapeiam a ligação à porta e incluem quaisquer definições de extensibilidade.

Além desses elementos principais, a especificação WSDL também define os seguintes elementos de utilitário -

  • Documentation - Este elemento é usado para fornecer documentação legível por humanos e pode ser incluído dentro de qualquer outro elemento WSDL.

  • Import - Este elemento é usado para importar outros documentos WSDL ou Esquemas XML.

NOTE - As partes WSDL geralmente são geradas automaticamente usando ferramentas com reconhecimento de serviços da web.

A Estrutura do Documento WSDL

A estrutura principal de um documento WSDL se parece com isto -

<definitions>
   <types>
      definition of types........
   </types>

   <message>
      definition of a message....
   </message>

   <portType>
      <operation>
         definition of a operation.......  
      </operation>
   </portType>

   <binding>
      definition of a binding....
   </binding>

   <service>
      definition of a service....
   </service>
</definitions>

Um documento WSDL também pode conter outros elementos, como elementos de extensão e um elemento de serviço que torna possível agrupar as definições de vários serviços da web em um único documento WSDL.

Continue a analisar um exemplo de documento WSDL.

A seguir está um arquivo WSDL fornecido para demonstrar um programa WSDL simples.

Suponhamos que o serviço forneça uma única função disponível publicamente, chamada sayHello . Esta função espera um único parâmetro de string e retorna uma única saudação de string. Por exemplo, se você passar o parâmetro mundo , a função de serviço digaHello retornará a saudação "Olá, mundo!".

Exemplo

Conteúdo do arquivo HelloService.wsdl -

<definitions name = "HelloService"
   targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns = "http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
 
   <message name = "SayHelloRequest">
      <part name = "firstName" type = "xsd:string"/>
   </message>
	
   <message name = "SayHelloResponse">
      <part name = "greeting" type = "xsd:string"/>
   </message>

   <portType name = "Hello_PortType">
      <operation name = "sayHello">
         <input message = "tns:SayHelloRequest"/>
         <output message = "tns:SayHelloResponse"/>
      </operation>
   </portType>

   <binding name = "Hello_Binding" type = "tns:Hello_PortType">
      <soap:binding style = "rpc"
         transport = "http://schemas.xmlsoap.org/soap/http"/>
      <operation name = "sayHello">
         <soap:operation soapAction = "sayHello"/>
         <input>
            <soap:body
               encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
               namespace = "urn:examples:helloservice"
               use = "encoded"/>
         </input>
		
         <output>
            <soap:body
               encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
               namespace = "urn:examples:helloservice"
               use = "encoded"/>
         </output>
      </operation>
   </binding>

   <service name = "Hello_Service">
      <documentation>WSDL File for HelloService</documentation>
      <port binding = "tns:Hello_Binding" name = "Hello_Port">
         <soap:address
            location = "http://www.examples.com/SayHello/" />
      </port>
   </service>
</definitions>

Análise de Exemplo

  • Definitions - HelloService

  • Type - Usando tipos de dados embutidos e eles são definidos em XMLSchema.

  • Message -

    • sayHelloRequest - parâmetro firstName

    • sayHelloresponse - valor de retorno de saudação

  • Port Type - operação sayHello que consiste em um serviço de solicitação e resposta.

  • Binding - Direção para usar o protocolo de transporte SOAP HTTP.

  • Service - Serviço disponível em http://www.examples.com/SayHello/

  • Port - Associa a ligação com o URI http://www.examples.com/SayHello/ onde o serviço em execução pode ser acessado.

o <definitions>O elemento deve ser o elemento raiz de todos os documentos WSDL. Ele define o nome do serviço da web.

Aqui está o trecho de código do último capítulo que usa o elemento de definições .

<definitions name="HelloService"
   targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   ................................................
</definitions>

A partir do exemplo acima, podemos concluir que as definições -

  • é um contêiner de todos os outros elementos.

  • especifica que este documento é denominado HelloService .

  • especifica um atributo targetNamespace . O targetNamespace é uma convenção do esquema XML que permite que o documento WSDL se refira a si mesmo. Neste exemplo, especificamos um targetNamespace de http://www.examples.com/wsdl/HelloService.wsdl

  • especifica um namespace padrão: xmlns = http: //schemas.xmlsoap.org/wsdl/. Todos os elementos sem um prefixo de namespace, como message ou portType , são, portanto, considerados parte do namespace WSDL padrão.

  • especifica vários namespaces que são usados ​​no restante do documento.

NOTE- A especificação do namespace não exige que o documento esteja presente no local fornecido. O ponto importante é que você especifique um valor que seja único, diferente de todos os outros namespaces definidos.

Um serviço da web precisa definir suas entradas e saídas e como elas são mapeadas para dentro e para fora dos serviços. WSDL<types>elemento se encarrega de definir os tipos de dados que são usados ​​pelo serviço da web. Tipos são documentos XML ou partes de documentos.

  • O elemento types descreve todos os tipos de dados usados ​​entre o cliente e o servidor.

  • WSDL não está vinculado exclusivamente a um sistema de digitação específico.

  • WSDL usa a especificação W3C XML Schema como sua opção padrão para definir tipos de dados.

  • Se o serviço usar apenas tipos simples integrados do Esquema XML, como strings e inteiros, o elemento de tipos não é necessário.

  • WSDL permite que os tipos sejam definidos em elementos separados para que os tipos sejam reutilizáveis ​​com vários serviços da web.

Aqui está um trecho de código retirado da especificação W3C. Este código descreve como um elemento de tipos pode ser usado em um WSDL.

<types>
   <schema targetNamespace = "http://example.com/stockquote.xsd"
      xmlns = "http://www.w3.org/2000/10/XMLSchema">
		
      <element name = "TradePriceRequest">
         <complexType>
            <all>
               <element name = "tickerSymbol" type = "string"/>
            </all>
         </complexType>
      </element>
		
      <element name = "TradePrice">
         <complexType>
            <all>
               <element name = "price" type = "float"/>
            </all>
         </complexType>
      </element>
		
   </schema>
</types>

Os tipos de dados tratam do problema de identificar os tipos de dados e os formatos que você pretende usar com seus serviços da web. As informações de tipo são compartilhadas entre o remetente e o destinatário. Os destinatários das mensagens, portanto, precisam acessar as informações que você usou para codificar seus dados e devem entender como decodificar os dados.

o <message> O elemento descreve os dados que estão sendo trocados entre os provedores de serviços da web e os consumidores.

  • Cada serviço da Web possui duas mensagens: entrada e saída.

  • A entrada descreve os parâmetros para o serviço da web e a saída descreve os dados de retorno do serviço da web.

  • Cada mensagem contém zero ou mais <part> parâmetros, um para cada parâmetro da função de serviço da web.

  • Cada <part> parâmetro associado a um tipo concreto definido no <types> elemento de contêiner.

Vamos pegar um pedaço de código do capítulo de exemplo WSDL -

<message name = "SayHelloRequest">
   <part name = "firstName" type = "xsd:string"/>
</message>

<message name = "SayHelloResponse">
   <part name = "greeting" type = "xsd:string"/>
</message>

Aqui, dois elementos de mensagem são definidos. O primeiro representa uma mensagem de solicitação SayHelloRequest e o segundo representa uma mensagem de resposta SayHelloResponse .

Cada uma dessas mensagens contém um único elemento de parte. Para a solicitação, a parte especifica os parâmetros da função; neste caso, especificamos um único parâmetro firstName . Para a resposta, a parte especifica os valores de retorno da função; neste caso, especificamos um único valor de retorno de saudação.

o <portType> elemento combina vários elementos de mensagem para formar uma operação unilateral completa ou de ida e volta.

Por exemplo, um <portType>pode combinar uma solicitação e uma mensagem de resposta em uma única operação de solicitação / resposta. Isso é mais comumente usado em serviços SOAP. Um portType pode definir várias operações.

Vamos pegar um pedaço de código do capítulo de exemplo WSDL -

<portType name = "Hello_PortType">
   <operation name = "sayHello">
      <input message = "tns:SayHelloRequest"/>
      <output message = "tns:SayHelloResponse"/>
   </operation>
</portType>
  • O elemento portType define uma única operação, chamada sayHello .

  • A operação consiste em uma única mensagem de entrada SayHelloRequest e um

  • mensagem de saída SayHelloResponse .

Padrões de Operação

WSDL suporta quatro padrões básicos de operação -

Mão única

O serviço recebe uma mensagem. A operação, portanto, tem um único elemento de entrada . A gramática para uma operação unilateral é -

<wsdl:definitions .... > 
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken">
         <wsdl:input name = "nmtoken"? message = "qname"/>
      </wsdl:operation>
   </wsdl:portType >
</wsdl:definitions>

Pedido-resposta

O serviço recebe uma mensagem e envia uma resposta. A operação, portanto, tem um elemento de entrada , seguido por um elemento de saída . Para encapsular erros, um elemento opcional de falha também pode ser especificado. A gramática para uma operação de solicitação-resposta é -

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
         <wsdl:input name = "nmtoken"? message = "qname"/>
         <wsdl:output name = "nmtoken"? message = "qname"/>
         <wsdl:fault name = "nmtoken" message = "qname"/>*
      </wsdl:operation>
   </wsdl:portType>
</wsdl:definitions>

Solicitar-resposta

O serviço envia uma mensagem e recebe uma resposta. A operação, portanto, tem um elemento de saída , seguido por um elemento de entrada . Para encapsular erros, um elemento opcional de falha também pode ser especificado. A gramática para uma operação de solicitação de resposta é -

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
         <wsdl:output name = "nmtoken"? message = "qname"/>
         <wsdl:input name = "nmtoken"? message = "qname"/>
         <wsdl:fault name = "nmtoken" message = "qname"/>*
      </wsdl:operation>
   </wsdl:portType >
</wsdl:definitions>

Notificação

O serviço envia uma mensagem. A operação, portanto, tem um único elemento de saída . A seguir está a gramática para uma operação de notificação -

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken">
         <wsdl:output name = "nmtoken"? message = "qname"/>
      </wsdl:operation>
   </wsdl:portType>
</wsdl:definitions>

o <binding>O elemento fornece detalhes específicos sobre como uma operação portType será realmente transmitida pela rede.

  • As ligações podem ser disponibilizadas por meio de vários transportes, incluindo HTTP GET, HTTP POST ou SOAP.

  • As ligações fornecem informações concretas sobre qual protocolo está sendo usado para transferir operações portType .

  • As ligações fornecem informações sobre onde o serviço está localizado.

  • Para o protocolo SOAP, a ligação é <soap:binding>e o transporte são mensagens SOAP no topo do protocolo HTTP.

  • Você pode especificar várias ligações para um único portType .

O elemento de ligação tem dois atributos: nome e atributo de tipo .

<binding name = "Hello_Binding" type = "tns:Hello_PortType">

O atributo name define o nome da ligação e o atributo type aponta para a porta da ligação, neste caso a porta "tns: Hello_PortType".

Ligação SOAP

WSDL 1.1 inclui extensões integradas para SOAP 1.1. Ele permite que você especifique detalhes específicos do SOAP, incluindo cabeçalhos SOAP, estilos de codificação SOAP e o cabeçalho HTTP SOAPAction. Os elementos de extensão SOAP incluem o seguinte -

  • soap:binding
  • soap:operation
  • soap:body

sabão: ligação

Este elemento indica que a vinculação será disponibilizada via SOAP. O atributo style indica o estilo geral do formato da mensagem SOAP. Um valor de estilo de rpc especifica um formato RPC.

O atributo transport indica o transporte das mensagens SOAP. O valor http://schemas.xmlsoap.org/soap/http indica o transporte SOAP HTTP, enquanto http://schemas.xmlsoap.org/soap/smtp indica o transporte SOAP SMTP.

sabão: operação

Este elemento indica a ligação de uma operação específica a uma implementação SOAP específica. O atributo soapAction especifica que o cabeçalho HTTP SOAPAction seja usado para identificar o serviço.

sabão: corpo

Este elemento permite que você especifique os detalhes das mensagens de entrada e saída. No caso de HelloWorld, o elemento body especifica o estilo de codificação SOAP e o URN do namespace associado ao serviço especificado.

Aqui está o trecho de código do capítulo de exemplo -

<binding name = "Hello_Binding" type = "tns:Hello_PortType">
   <soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
   <operation name = "sayHello">
      <soap:operation soapAction = "sayHello"/>
			
      <input>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </input>
			
      <output>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </output>
   </operation>
</binding>

UMA <port> O elemento define um ponto final individual especificando um único endereço para uma ligação.

Aqui está a gramática para especificar uma porta -

<wsdl:definitions .... >
   <wsdl:service .... > *
      <wsdl:port name = "nmtoken" binding = "qname"> *
         <-- extensibility element (1) -->
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
  • O elemento port possui dois atributos: name e binding .

  • O atributo name fornece um nome exclusivo entre todas as portas definidas no documento WSDL anexo.

  • O atributo de ligação refere-se à ligação usando as regras de ligação definidas por WSDL.

  • Os elementos de extensibilidade de ligação são usados ​​para especificar as informações de endereço da porta.

  • Uma porta NÃO DEVE especificar mais de um endereço.

  • Uma porta NÃO DEVE especificar nenhuma informação vinculativa além das informações de endereço.

Aqui está um trecho de código do capítulo de exemplo -

<service name = "Hello_Service">
   <documentation>WSDL File for HelloService</documentation>
   <port binding = "tns:Hello_Binding" name = "Hello_Port">
      <soap:address
         location = "http://www.examples.com/SayHello/">
   </port>
</service>

o <service>elemento define as portas suportadas pelo serviço da web. Para cada um dos protocolos suportados, há um elemento de porta. O elemento de serviço é uma coleção de portas.

  • Os clientes de serviço da Web podem aprender o seguinte com o elemento de serviço -

    • onde acessar o serviço,
    • por meio de qual porta acessar o serviço da web, e
    • como as mensagens de comunicação são definidas.
  • O elemento de serviço inclui um elemento de documentação para fornecer documentação legível por humanos.

Aqui está um trecho de código do capítulo de exemplo -

<service name = "Hello_Service">
   <documentation>WSDL File for HelloService</documentation>
   <port binding = "tns:Hello_Binding" name = "Hello_Port">
      <soap:address
         location = "http://www.examples.com/SayHello/">
   </port>
</service>

Os atributos de ligação do elemento de porta associam o endereço do serviço a um elemento de ligação definido no serviço da web. Neste exemplo, é Hello_Binding

<binding name =" Hello_Binding" type = "tns:Hello_PortType">
   <soap:binding style = "rpc"
      transport = "http://schemas.xmlsoap.org/soap/http"/>
   <operation name = "sayHello">
      <soap:operation soapAction = "sayHello"/>
		
      <input>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </input>
			
      <output>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </output>
   </operation>
</binding>

Cobrimos os fundamentos do WSDL neste tutorial. A próxima etapa é aprender SOAP, UDDI e Web Services.

Serviços web

Os serviços da Web são aplicativos da Web de padrão aberto (XML, SOAP, HTTP, etc.) que interagem com outros aplicativos da Web com o objetivo de trocar dados.

Para saber mais sobre Web Services, visite o Tutorial de Web Services.

UDDI

UDDI é um padrão baseado em XML para descrever, publicar e localizar serviços da Web.

Para saber mais sobre UDDI, visite o Tutorial UDDI.

SABONETE

SOAP é um protocolo simples baseado em XML que permite que os aplicativos troquem informações sobre HTTP.

Para saber mais sobre o SOAP, visite o Tutorial do SOAP.

Se você estiver interessado em listar sua empresa, site ou livros como um recurso WSDL, entre em contato em [email protected]

Lista de especificações WSDL

Specification Draft / Proposal W3C Recommendation
     
WSDL 1.1 Nota

15 de março de 2001

 
Cenários de uso de WSDL

04 de junho de 2002

 
Requisitos WSDL

28. Out 2002

 
Arquitetura WSDL

11 de fevereiro de 2004

 
Glossário WSDL

11 de fevereiro de 2004

 
Cenários de uso de WSDL

11 de fevereiro de 2004

 
WSDL 1.2 Core Language

11 de junho de 2003

 
Padrões de mensagens WSDL 1.2

11 de junho de 2003

 
Ligações WSDL 1.2

11 de junho de 2003

 
WSDL 2.0 Primer

27 de março de 2006

 
WSDL 2.0 Core Language

27 de março de 2006

 
Adjuntos WSDL 2.0

27 de março de 2006

 
Ligação WSDL 2.0 SOAP 1.1

27 de março de 2006

 
Mapeamento RDF WSDL 2.0

18 de maio de 2006

 
WS Addressing Core  

09 de maio de 2006

WS Addressing SOAP Binding  

09 de maio de 2006

Arquitetura da Web  

15. dezembro 2004