106 votes

Différence entre un message SOAP et un WSDL ?

Je ne sais pas comment les messages SOAP et WSDL s'articulent entre eux. J'ai commencé à examiner les messages SOAP tels que :

    POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

Tous les messages SOAP sont-ils des WSDL ? SOAP est-il un protocole qui accepte ses propres "messages SOAP" ou "WSDL" ? S'ils sont différents, alors quand dois-je utiliser les messages SOAP et quand dois-je utiliser les WSDL ?

Une clarification à ce sujet serait géniale.

129voto

Jono Points 1540

Un document SOAP est envoyé par demande. Imaginons que nous soyons une librairie et que nous disposions d'un serveur distant que nous interrogeons pour connaître le prix actuel d'un livre particulier. Supposons que nous devions transmettre au serveur le titre du livre, le nombre de pages et le numéro ISBN.

Chaque fois que nous voulions connaître le prix, nous envoyions un message SOAP unique. Ça ressemblerait à quelque chose comme ça ;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

Et on s'attend à recevoir un message de réponse SOAP du genre ;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Le WSDL décrit ensuite comment gérer/traiter ce message lorsqu'un serveur le reçoit. Dans notre cas, elle décrit les types de Title, NumPages et ISBN, si nous devons attendre une réponse du message GetBookPrice et à quoi cette réponse doit ressembler.

Les types ressembleraient à ceci ;

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

Mais le WSDL contient également d'autres informations, sur les fonctions qui sont liées entre elles pour former des opérations, sur les opérations disponibles dans le service et sur l'endroit du réseau où vous pouvez accéder au service/aux opérations.

Voir aussi Exemples de WSDL annoté W3

78voto

Matthew Points 6447

Un message SOAP est un document XML qui est utilisé pour transmettre vos données. WSDL est un document XML qui décrit comment se connecter et faire des demandes à votre service web.

En gros, les messages SOAP sont les données que vous transmettez, le WSDL vous indique ce que vous pouvez faire et comment effectuer les appels.

Une recherche rapide dans Google vous permettra de trouver de nombreuses sources de lectures supplémentaires (le lien vers le livre précédent est maintenant mort, pour lutter contre cela, je mettrai toute nouvelle recommandation dans les commentaires).

Je prends juste note de vos questions spécifiques :

Tous les messages SOAP sont-ils des WSDL ? Non, ce n'est pas du tout la même chose.

SOAP est-il un protocole qui accepte ses propres "messages SOAP" ou "WSDL" ? Non - il faut lire car c'est très loin.

Si elles sont différentes, alors quand dois-je utiliser les messages SOAP et quand dois-je utiliser les WSDL ? Le savon est la structure que vous appliquez à votre message/données pour le transfert. Les WSDL ne sont utilisés que pour déterminer comment faire appel au service en premier lieu. Il s'agit souvent d'une opération ponctuelle, lorsque vous ajoutez pour la première fois du code pour faire appel à un service Web particulier.

32voto

Jad Chahine Points 2742

Nous devons définir ce qu'est un service web avant de dire quelles sont les différences entre le SOAP et le WSDL, ces deux éléments (SOAP et WSDL) étant des composants d'un service web.

La plupart des applications sont développées pour interagir avec les utilisateurs. L'utilisateur saisit ou recherche des données par le biais d'une interface et l'application répond ensuite à la saisie de l'utilisateur.

Un service Web fait plus ou moins la même chose, sauf qu'une application de service Web ne communique que de machine à machine ou d'application à application. Il n'y a souvent aucune interaction directe avec l'utilisateur.

Un service Web est essentiellement une collection de protocoles ouverts utilisés pour échanger des données entre applications. L'utilisation de protocoles ouverts permet aux services Web d'être indépendants de la plate-forme. Les logiciels écrits dans différents langages de programmation et fonctionnant sur différentes plates-formes peuvent utiliser les services Web pour échanger des données sur des réseaux informatiques tels que l'Internet. En d'autres termes, les applications Windows peuvent dialoguer avec les applications PHP, Java et Perl et bien d'autres, ce qui ne serait pas possible dans des circonstances normales.

Comment fonctionnent les services Web ?

Comme les différentes applications sont écrites dans des langages de programmation différents, elles ne peuvent souvent pas communiquer entre elles. Un service Web permet cette communication en utilisant une combinaison de protocoles et de normes ouverts, principalement XML, SOAP et WSDL. Un service Web utilise XML pour baliser les données, SOAP pour transférer un message et enfin WSDL pour décrire la disponibilité des services. Examinons ces trois principaux composants d'une application de service Web.

Protocole d'accès simple aux objets (SOAP)

Le protocole SOAP (Simple Object Access Protocol) est un protocole permettant d'envoyer et de recevoir des messages entre des applications sans être confronté à des problèmes d'interopérabilité (l'interopérabilité signifiant que la plate-forme sur laquelle un service Web est exécuté n'a plus d'importance). Un autre protocole qui a une fonction similaire est le HTTP. Il est utilisé pour accéder à des pages Web ou pour surfer sur le Net. Grâce à HTTP, vous n'avez pas à vous soucier du type de serveur Web (Apache, IIS ou autre) qui vous sert les pages que vous consultez, ni du fait que ces pages ont été créées en ASP.NET ou en HTML.

Comme SOAP est utilisé à la fois pour les demandes et les réponses, son contenu varie légèrement en fonction de son objectif.

Voici un exemple de message de demande et de réponse SOAP

Demande SOAP :

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPrice> 
    <m:BookName>The Fleamarket</m:BookName> 
    </m:GetBookPrice> 
</soap:Body> 
</soap:Envelope>

Réponse SOAP :

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPriceResponse> 
    <m: Price>10.95</m: Price> 
    </m:GetBookPriceResponse> 
</soap:Body> 
</soap:Envelope> 

Bien que les deux messages se ressemblent, ils appliquent des méthodes différentes. Par exemple, si vous regardez les exemples ci-dessus, vous pouvez voir que le message de demande utilise la fonction GetBookPrice pour obtenir le prix du livre. La réponse est effectuée par le GetBookPriceResponse qui sera le message que vous verrez en tant que "demandeur". Vous pouvez également constater que les messages sont composés à l'aide de XML.

Langage de description des services Web ou WSDL

WSDL est un document qui décrit un service Web et vous indique également comment accéder à ses méthodes et les utiliser.

WSDL s'occupe de savoir comment connaître les méthodes disponibles dans un service Web que vous rencontrez par hasard sur Internet.

Jetez un coup d'œil à un exemple de fichier WSDL :

<?xml version="1.0" encoding="UTF-8"?> 
<definitions  name ="DayOfWeek"  
  targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://schemas.xmlsoap.org/wsdl/">  
  <message name="DayOfWeekInput"> 
    <part name="date" type="xsd:date"/> 
  </message> 
  <message name="DayOfWeekResponse"> 
    <part name="dayOfWeek" type="xsd:string"/> 
  </message> 
  <portType name="DayOfWeekPortType"> 
    <operation name="GetDayOfWeek"> 
      <input message="tns:DayOfWeekInput"/> 
      <output message="tns:DayOfWeekResponse"/> 
    </operation> 
  </portType> 
  <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> 
    <soap:binding style="document"  
      transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetDayOfWeek"> 
      <soap:operation soapAction="getdayofweek"/> 
      <input> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"  
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"   
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
    </operation> 
  </binding> 
  <service name="DayOfWeekService" > 
    <documentation> 
      Returns the day-of-week name for a given date 
    </documentation> 
    <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> 
      <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> 
    </port> 
  </service> 
</definitions> 

Les principales choses à retenir d'un fichier WSDL sont qu'il vous fournit :

  • Une description d'un service Web

  • Les méthodes qu'un service Web utilise et les paramètres qu'il prend

  • Un moyen de localiser les services Web

29voto

scartag Points 9312

Un WSDL (Web Service Definition Language) est un fichier de méta-données qui décrit le service web.

Des choses comme le nom de l'opération, les paramètres, etc.

Les messages soap sont les charges utiles réelles

7voto

Israel Gale Points 71

Une meilleure analogie que l'appel téléphonique : La commande de produits par courrier postal auprès d'un service de vente par correspondance. Le document WSDL est comme les instructions qui expliquent comment créer le type de formulaire de commande que le fournisseur de services acceptera. Un message SOAP est comme une enveloppe au design standard (taille, forme, construction) que tous les bureaux de poste du monde savent traiter. Vous placez votre formulaire de commande dans une telle enveloppe. Le réseau (par exemple, l'internet) est le service postal. Vous mettez votre enveloppe dans le courrier. Les employés du service postal ne regardent pas à l'intérieur de l'enveloppe. La charge utile XML est le bon de commande que vous avez mis dans l'enveloppe. Une fois l'enveloppe distribuée par la poste, le fournisseur de services Web ouvre l'enveloppe et traite le bon de commande. Si vous avez créé et rempli le formulaire correctement, il vous renverra par courrier le produit que vous avez commandé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X