WSDL

Web Services Description Language (WSDL)

W3C Note 15 March 2001
This version:
http://www.w3.org/TR/2001/NOTE-wsdl-20010315
Latest version:
http://www.w3.org/TR/wsdl
Authors (alphabetically):
Erik Christensen, Microsoft
Francisco Curbera, IBM Research
Greg Meredith, Microsoft
Sanjiva Weerawarana, IBM Research
Copyright© 2001 Ariba, International Business Machines Corporation, Microsoft

Ce document est extrait du site du W3C (cf encadré ci-dessus). J’ai traduit et fait la synthèse d’une petite partie du document original en anglais.

Un document WSDL utilise les éléments suivants dans la définition d’un service réseau :

  • Types– un container pour les définitions de type de données utilisant des types système (comme XSD).
  • Message– une définition abstraite et typée de la donnée qui va être communiquée.
  • Operation– une description abstraite d’une action supportée par le service.
  • Port Type– un ensemble abstrait d’opérations supporté par un ou plusieurs endpoints.
  • Binding– une spécification de protocole concret et de format de données pour un type de port (Port Type) donné.
  • Port– un seul endpoint défini comme combinaison d’un binding et d’une adresse réseau.
  • Service– une collection de endpoints en rapport.

Il est important de noter que le WSDL n’introduit pas un nouveau langage de définition. Le format WSDL supporte les spécifications XML (XSD) et autorise l’utilisation d’autres langages de définition par des extensions.

De plus, WSDL définit un mécanisme commun de binding. Le binding est utilisé pour attacher un protocole, une structure ou un format de donnée spécifique à un message, une opération ou un endpoint. Il autorise la réutilisation de définitions abstraites.

Cette spécification introduit des extensions de binding spécifiques pour les protocoles et formats de messages suivants :

  • SOAP 1.1
  • HTTP GET / POST
  • MIME

Rien n’empêche l’utilisation d’autres extensions de binding avec le WSDL.

Exemple de document WSDL

L’exemple suivant montre la définition WSDL d’un service simple qui fournit les cotations boursières. Le service met à disposition une seule opération qui s’appelle GetLastTradePrice et qui est déployée selon le protocole SOAP 1.1 par HTTP. La requête prend en entrée un symbole de type string et renvoie le prix en float.

Cet exemple utilise un format XML (pas de l’encodage SOAP).

Exemple 1 Requête/Réponse SOAP 1.1 par HTTP

<?xml version="1.0"?>
<definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl"
          xmlns:tns="http://example.com/stockquote.wsdl"
          xmlns:xsd1="http://example.com/stockquote.xsd"
          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
          xmlns="http://schemas.xmlsoap.org/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>
    <message name="GetLastTradePriceInput">
        <part name="body" element="xsd1:TradePriceRequest"/>
    </message>
    <message name="GetLastTradePriceOutput">
        <part name="body" element="xsd1:TradePrice"/>
    </message>
    <portType name="StockQuotePortType">
        <operation name="GetLastTradePrice">
           <input message="tns:GetLastTradePriceInput"/>
           <output message="tns:GetLastTradePriceOutput"/>
        </operation>
    </portType>
    <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="GetLastTradePrice">
           <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
           <input>
               <soap:body use="literal"/>
           </input>
           <output>
              <soap:body use="literal"/>
           </output>
        </operation>
    </binding>
    <service name="StockQuoteService">
        <documentation>My first service</documentation>
        <port name="StockQuotePort" binding="tns:StockQuoteBinding">
           <soap:address location="http://example.com/stockquote"/>
        </port>
    </service>
</definitions>

Conventions de notation

1. Les mots clé "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", et "OPTIONAL" employés dans ce document sont à interpréter de la manière dont ils sont décrits dans RFC-2119.

2. Les espaces de nom (namespaces) suivants sont utilisés dans ce document :

~préfixe ~namespace URI
wsdl http://schemas.xmlsoap.org/wsdl/
soap http://schemas.xmlsoap.org/wsdl/soap/
http http://schemas.xmlsoap.org/wsdl/http/
mime http://schemas.xmlsoap.org/wsdl/mime/
soapenc http://schemas.xmlsoap.org/soap/encoding/
soapenv http://schemas.xmlsoap.org/soap/envelope/
xsi http://www.w3.org/2000/10/XMLSchema-instance
xsd http://www.w3.org/2000/10/XMLSchema
tns (varié)
(autre) (divers)
page_revision: 2, last_edited: 1238945878|%e %b %Y, %H:%M %Z (%O ago)
Licence Zorgloob 1.0
http://licence.zorgloob.com