Différence entre un message SOAP et un WSDL?

102

Je ne sais pas comment les messages SOAP et WSDL s'associent? 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, quand dois-je utiliser les messages SOAP et quand dois-je utiliser les messages WSDL?

Une clarification à ce sujet serait géniale.

James
la source
1
Un wsdl est une spécification des messages qui peuvent être envoyés et de ce à quoi on peut s'attendre comme réponse. Dans un sens, le document wsdl n'est pas nécessaire pour la communication soap, mais c'est un élément obligatoire selon le protocole.
troelskn

Réponses:

121

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

Chaque fois que nous voulions connaître le prix, nous envoyions un message SOAP unique. Cela 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 nous nous attendons à recevoir un message de réponse SOAP comme;

<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, il décrit les types de Title, NumPages et ISBN, si nous devrions attendre une réponse du message GetBookPrice et à quoi devrait ressembler cette réponse.

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 plus d'informations, sur les fonctions liées entre elles pour effectuer des opérations, sur les opérations disponibles dans le service et sur la localisation sur un réseau où vous pouvez accéder au service / aux opérations.

Voir aussi Exemples WSDL annotés W3

Jono
la source
4
Lorsque vous dites cette ligne «Le WSDL décrit ensuite comment gérer / traiter ce message lorsqu'un serveur le reçoit». Ne pensez-vous pas qu'il y a quelque chose qui ne va pas ici. Je pense que WSDL est plus pour le client de savoir quels sont les services exposés au client. Je ne pense pas que cela guide la gestion ou le traitement des messages vers le serveur. Ai-je un sens?
Incassable le
76

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

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

Une recherche rapide dans Google fournira de nombreuses sources de lecture supplémentaire (le lien du livre précédent maintenant mort, pour lutter contre cela, mettra de nouvelles recommandations dans les commentaires)

Juste en notant 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 - lecture requise car c'est loin.

S'ils sont différents, quand dois-je utiliser les messages SOAP et quand dois-je utiliser les messages WSDL? Soap est la structure que vous appliquez à votre message / données pour le transfert. Les WSDL sont utilisés uniquement pour déterminer comment passer des appels au service en premier lieu. Il s'agit souvent d'une chose ponctuelle lorsque vous ajoutez du code pour la première fois pour appeler un service Web particulier.

Matthieu
la source
Je ne comprends pas ce que vous entendez par «chose ponctuelle» si vous pouviez élaborer avec des exemples de messages qui seraient géniaux. Aussi, vous dites que les messages WSDL et SOAP sont utilisés ensemble?
James
6
WSDL vous indique comment appeler le service Web. Souvent, vous utiliserez le WSDL pour générer automatiquement le code pour appeler le service Web et ne plus jamais l'utiliser. Passer en revue les chapitres du livre que j'ai lié devrait aider.
Matthew
27

Un WSDL (Web Service Definition Language) est un fichier de métadonné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 véritables charges utiles

scartag
la source
25

Nous devons définir ce qu'est un service Web avant de dire quelle est la différence entre SOAP et WSDL où les deux (SOAP et WSDL) sont des composants d'un service Web

La plupart des applications sont développées pour interagir avec les utilisateurs, l'utilisateur entre ou recherche des données via une interface et l'application répond alors à l'entrée de l'utilisateur.

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

Un service Web est essentiellement un ensemble 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 qui sont écrits dans différents langages de programmation et qui s'exécutent sur différentes plates-formes peuvent utiliser des services Web pour échanger des données sur des réseaux informatiques tels qu'Internet. En d'autres termes, les applications Windows peuvent communiquer avec les applications PHP, Java et Perl et bien d'autres, ce qui dans des circonstances normales ne serait pas possible.

Comment fonctionnent les services Web?

Étant donné que différentes applications sont écrites dans différents langages de programmation, elles ne peuvent souvent pas communiquer entre elles. Un service Web permet cette communication en utilisant une combinaison de protocoles ouverts et de normes, 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. Jetons un coup d'œil à ces trois composants principaux d'une application de service Web.

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

Le protocole d'accès à un objet simple ou SOAP est un protocole permettant d'envoyer et de recevoir des messages entre applications sans rencontrer de problèmes d'interopérabilité (l'interopérabilité signifie que la plate-forme sur laquelle un service Web s'exécute devient non pertinente). Un autre protocole qui a une fonction similaire est HTTP. Il est utilisé pour accéder aux pages Web ou pour surfer sur Internet. HTTP garantit que vous n'avez pas à vous soucier du type de serveur Web - qu'il s'agisse d'Apache, d'IIS ou de tout autre - vous sert les pages que vous consultez ou si les pages que vous affichez ont été créées en ASP.NET ou HTML.

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

Vous trouverez ci-dessous un exemple de requête SOAP et de message de réponse

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 utilisent des méthodes différentes. Par exemple, en regardant les exemples ci-dessus, vous pouvez voir que le message de demande utilise la GetBookPriceméthode pour obtenir le prix du livre. La réponse est effectuée par leGetBookPriceResponse méthode, qui va être le message que vous verrez en tant que "demandeur". Vous pouvez également voir que les messages sont composés en utilisant XML.

Langage de description de services Web ou WSDL

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

WSDL se charge de savoir comment savoir quelles méthodes sont disponibles dans un service Web que vous rencontrez sur Internet.

Jetez un œ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 à propos d'un fichier WSDL sont qu'il vous fournit:

  • Une description d'un service Web

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

  • Un moyen de localiser les services Web

  • Jad Chahine
    la source
    Description concrète
    TapanHP
    7

    Meilleure analogie que l'appel téléphonique: commander des produits par courrier postal auprès d'un service de vente par correspondance. Le document WSDL ressemble aux instructions qui expliquent comment créer le type de bons de commande que le fournisseur de services acceptera. Un message SOAP est comme une enveloppe avec un design standard (taille, forme, construction) que chaque bureau de poste du monde entier sait gérer. Vous mettez votre bon de commande dans une telle enveloppe. Le réseau (par exemple 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. Le code XML de la charge utile est le bon de commande que vous avez inclus dans l'enveloppe. Une fois que le bureau de poste a livré l'enveloppe, le fournisseur de services Web ouvre l'enveloppe et traite le bon de commande. Si vous avez créé et rempli le formulaire correctement,

    Israël Gale
    la source
    4

    En termes simples si vous disposez d'un service web de calculatrice. WSDL décrit les fonctions que vous pouvez implémenter ou exposées au client. Par exemple: ajouter, supprimer, soustraire et ainsi de suite. Où, en utilisant SOAP, vous effectuez des actions telles que doDelete (), doSubtract (), doAdd (). Donc SOAP et WSDL sont des pommes et des oranges. Nous ne devons pas les comparer. Ils ont tous deux leurs propres fonctionnalités.

    Incassable
    la source
    1

    SOAP: C'est un protocole de communication basé sur XML standard ouvert qui est utilisé pour échanger des informations de l'utilisateur vers le service Web ou vice versa. Le savon n'est que le document dans lequel les données sont organisées d'une certaine manière. Pour chaque demande et réponse, un savon séparé peut être présent.

    WSDL: Dans soap, les données sont organisées d'une certaine manière et cette organisation est spécifiée dans WSDL, le type de données qui doit être utilisé est également spécifié ici. Pour la demande et la réponse, un seul WSDL sera présent

    Arun Kumar
    la source
    0

    Le WSDL est une sorte de contrat entre le fournisseur d'API et le client, il décrit le service web: la fonction publique, champ optionnel / obligatoire ...

    Mais le message soap est une donnée transférée entre le client et le fournisseur (payload)

    Abderrahim Soubai-Elidrisi
    la source
    0

    WSDL agit comme une interface entre l'expéditeur et le destinataire.
    Le message SOAP est une demande et une réponse au format xml.

    comparaison avec java RMI

    WSDL est la classe d'interface. Le
    message SOAP est le message de demande et de réponse marshalé.

    fasil
    la source
    -1

    Nous pouvons considérer un appel téléphonique dans ce numéro est wsdl et l'échange d'informations est savon.

    WSDL est la description de la connexion avec le serveur de communication. SOAP est d'avoir des messages de communication.

    Khushbu
    la source
    1
    Non, le numéro de téléphone ressemblerait davantage à l'un des points de terminaison définis dans le WSDL. Il n'y a pas de véritable équivalent à WSDL dans le domaine des appels téléphoniques. Le plus proche peut être un annuaire téléphonique, surtout si vous incluez le concept de «pages jaunes» qui catégorise les entreprises et fournit des détails sur l'entreprise (pas seulement le numéro de téléphone).
    John Saunders