O software hoje em dia é mais poderoso do que nunca. Ele pode fornecer tanta informação e funcionalidades para os usuários. Com as capacidades cada vez mais poderosas das aplicações, você já se perguntou como é tudo isso possível?
Um tipo de arquivo que aparece frequentemente na retrospectiva do desenvolvimento de aplicações é um arquivo WSDL, mas o que é isso?
O que é um Arquivo WSDL?
WSDL (Web Services Description Language) permite que diferentes aplicações se comuniquem entre si através de uma rede de maneira padronizada. Ele conecta provedores e consumidores de serviços web, permitindo trocas de dados entre, mas não se limitando, às duas partes.
Os arquivos WSDL também são conhecidos por fornecer uma ampla descrição sobre as capacidades de um serviço web, especificamente para serviços web baseados em SOAP. Os arquivos WSDL são escritos na linguagem XML (eXtensible Markup Language) e são vitais para o teste de APIs SOAP.
Mais importante, os arquivos WSDL são significativos devido à definição de um acordo formal entre o provedor de serviços web e o consumidor do serviço. Os arquivos WSDL mostram quais operações estão disponíveis, o formato e a estrutura das mensagens e outros detalhes importantes necessários ao usar o serviço web.
Estrutura dos Arquivos WSDL com Exemplos
Os arquivos WSDL têm componentes-chave que fornecem informações sobre seu uso. Este artigo irá demonstrar partes de um arquivo WSDL na linguagem XML, usando um serviço web de clima como exemplo.
Tipos type
A seção type
dos arquivos WSDL é usada para definir os tipos de dados que serão usados nas operações do serviço web.
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/weather">
<element name="City" type="string"/>
<element name="Weather" type="string"/>
</schema>
</types>
Este exemplo especifica a estrutura dos elementos, incluindo seus nomes City
e Weather
que são do tipo string
.
Mensagem message
A seção message
define os elementos de dados que estão sendo trocados entre o provedor de serviços web e o usuário do serviço. Nos exemplos acima, você pode ver os nomes das mensagens GetWeatherRequest
e GetWeatherResponse
.
<message name="GetWeatherRequest">
<part name="City" element="tns:City"/>
</message>
<message name="GetWeatherResponse">
<part name="Weather" element="tns:Weather"/>
</message>
Aqui, as mensagens GetWeatherRequest
e GetWeatherResponse
são definidas com uma parte especificando os elementos de dados que estão sendo enviados ou recebidos.
Tipo de Porta portType
A seção portType
descreve um conjunto de operações que podem ser realizadas pelo serviço web, como o nome da operação GetWeather
. Ela define a interface abstrata para o serviço, listando as operações junto com suas mensagens de entrada tns:GetWeatherRequest
e saída tns:GetWeatherResponse
.
<portType name="WeatherServicePortType">
<operation name="GetWeather">
<input message="tns:GetWeatherRequest"/>
<output message="tns:GetWeatherResponse"/>
</operation>
</portType>
O exemplo acima mostra WeatherServicePortType
uma operação definida GetWeather
com mensagens de entrada e saída especificadas.
Ligação binding
A seção binding
especifica como as operações abstratas definidas em portType
estão mapeadas para um protocolo concreto de comunicação. Ela define detalhes, como o formato da mensagem e o protocolo (por exemplo, SOAP).
<binding name="WeatherServiceSoapBinding" type="tns:WeatherServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetWeather">
<soap:operation soapAction="http://example.com/weather/GetWeather"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
Neste exemplo, WeatherServiceSoapBinding
é definido com SOAP como o protocolo de ligação, especificando detalhes sobre o formato da mensagem e transporte.
Porta port
A seção port
especifica o endereço de rede onde o serviço web pode ser acessado.
<service name="WeatherService">
<port name="WeatherServicePort" binding="tns:WeatherServiceSoapBinding">
<soap:address location="http://example.com/weather/service"/>
</port>
</service>
Aqui, WeatherService
é definido com WeatherServicePort
que usa o binding SOAP, e seu endereço é especificado como http://example.com/weather/service
.
Exemplos de Arquivos WSDL
Exemplo Simples de Arquivo WSDL de Serviço Web de Clima
Compilando os diferentes códigos dos componentes-chave fornecidos na seção anterior, podemos combiná-los e criar um arquivo WSDL simples para um serviço web de clima.
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/weather"
targetNamespace="http://example.com/weather">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/weather">
<element name="City" type="string"/>
<element name="Weather" type="string"/>
</schema>
</types>
<message name="GetWeatherRequest">
<part name="City" element="tns:City"/>
</message>
<message name="GetWeatherResponse">
<part name="Weather" element="tns:Weather"/>
</message>
<portType name="WeatherServicePortType">
<operation name="GetWeather">
<input message="tns:GetWeatherRequest"/>
<output message="tns:GetWeatherResponse"/>
</operation>
</portType>
<binding name="WeatherServiceSoapBinding" type="tns:WeatherServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetWeather">
<soap:operation soapAction="http://example.com/weather/GetWeather"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="WeatherService">
<port name="WeatherServicePort" binding="tns:WeatherServiceSoapBinding">
<soap:address location="http://example.com/weather/service"/>
</port>
</service>
</definitions>
Neste exemplo simples de serviço web de clima, pode-se observar que:
- O serviço web opera sob o namespace
http://example.com/weather
. - Define dois tipos de dados simples:
City
eWeather
. - Existem duas mensagens,
GetWeatherRequest
eGetWeatherResponse
, especificando os dados de entrada e saída para a operaçãoGetWeather
. - O tipo de porta
WeatherServicePortType
define a operaçãoGetWeather
. WeatherServiceSoapBinding
especifica que a comunicação usará SOAP com um estilo e transporte específicos.- O serviço
WeatherService
tem uma porta chamadaWeatherServicePort
usando o binding SOAP, e seu endereço é especificado comohttp://example.com/weather/service
.
Exemplo Complexo de Arquivo WSDL de Serviço Web de Comércio Eletrônico
Aqui está um exemplo mais complicado de arquivo WSDL para serviço web de comércio eletrônico que inclui múltiplas operações, tipos de dados e funcionalidades.
?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/ecommerce"
targetNamespace="http://example.com/ecommerce">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/ecommerce">
<element name="Product">
<complexType>
<sequence>
<element name="ProductId" type="string"/>
<element name="ProductName" type="string"/>
<element name="Price" type="decimal"/>
</sequence>
</complexType>
</element>
<element name="Order">
<complexType>
<sequence>
<element name="OrderId" type="string"/>
<element name="CustomerName" type="string"/>
<element name="Products" type="tns:Product" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<message name="GetProductRequest">
<part name="ProductId" element="tns:ProductId"/>
</message>
<message name="GetProductResponse">
<part name="Product" element="tns:Product"/>
</message>
<message name="PlaceOrderRequest">
<part name="Order" element="tns:Order"/>
</message>
<message name="PlaceOrderResponse">
<part name="Confirmation" type="string"/>
</message>
<portType name="ECommerceServicePortType">
<operation name="GetProduct">
<input message="tns:GetProductRequest"/>
<output message="tns:GetProductResponse"/>
</operation>
<operation name="PlaceOrder">
<input message="tns:PlaceOrderRequest"/>
<output message="tns:PlaceOrderResponse"/>
</operation>
</portType>
<binding name="ECommerceServiceSoapBinding" type="tns:ECommerceServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetProduct">
<soap:operation soapAction="http://example.com/ecommerce/GetProduct"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="PlaceOrder">
<soap:operation soapAction="http://example.com/ecommerce/PlaceOrder"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ECommerceService">
<port name="ECommerceServicePort" binding="tns:ECommerceServiceSoapBinding">
<soap:address location="http://example.com/ecommerce/service"/>
</port>
</service>
</definitions>
Neste exemplo complexo de serviço web de comércio eletrônico, pode-se observar que:
- Tipos de dados complexos
Product
eOrder
são definidos com elementos aninhados (comoProductID
,ProductName
ePrice
) e sequências. - Múltiplas operações
GetProduct
ePlaceOrder
estão definidas dentro doECommerceServicePortType
. - Mensagens
GetProductRequest
,GetProductResponse
,PlaceOrderRequest
,PlaceOrderResponse
são definidas para cada operação, especificando os dados de entrada e saída. - A ligação SOAP
ECommerceServiceSoapBinding
especifica os detalhes de formatação para comunicação usando SOAP. - O serviço
ECommerceService
tem uma porta chamadaECommerceServicePort
usando o binding SOAP, e seu endereço é especificado comohttp://example.com/ecommerce/service
.
Editando Arquivos WSDL Usando Apidog
Como os arquivos WSDL são relativamente comuns na cena de desenvolvimento de software, você pode ter que editar ou criar um você mesmo. Com muitas plataformas de API disponíveis, o Apidog é uma excelente escolha.
O Apidog permite que desenvolvedores, provedores de serviços web e usuários de serviços web de qualquer formação façam uma transição suave de outras plataformas de API para o Apidog.
Felizmente, o Apidog também cobre importação de arquivos WSDL! Se você estiver interessado em experimentá-lo, certifique-se de baixar o Apidog usando os botões abaixo.
Não se esqueça de fazer login e iniciar um novo projeto assim que entrar. Se você precisar de ajuda, dê uma olhada na Documentação de Ajuda do Apidog.
Importando Sua API SOAP para o Apidog a Partir de um Arquivo WSDL

Uma vez que você tenha aberto um novo projeto, clique no botão "Configurações" na barra de ferramentas vertical encontrada no lado esquerdo da janela do Apidog. Em seguida, clique nas Setas 2 e 3 nessa ordem.
Testando API SOAP Facilmente no Apidog

Se você importou o arquivo WSDL com sucesso, deverá ver seu nome no lado esquerdo da tela, como mostrado ao redor da Setas 1.
Para começar a editar o arquivo WSDL, clique nas Setas 2 a 4 em ordem crescente, e você estará pronto para começar!
Conclusão
Com arquivos WSDL baseados em XML (eXtensible Markup Language), é um pouco mais fácil de entender. Os arquivos WSDL podem variar em complexidade dependendo de quão específicas são as descrições e funcionalidades do serviço web.