web-dev-qa-db-fra.com

Différence entre un SOAP message et un WSDL?

Je ne comprends pas comment SOAP messages et WSDL s'intègrent? J'ai commencé à rechercher des 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 en WSDL? Est-ce que SOAP est 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 fichiers WSDL?

Quelques éclaircissements à ce sujet seraient géniaux.

101
James

Un document SOAP est envoyé par demande. Supposons que nous sommes une librairie et que nous avons interrogé un serveur distant 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 unique SOAP. 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 traiter/traiter ce message lorsqu'un serveur le reçoit. Dans notre cas, il décrit quels types Titre, NumPages et ISBN seraient, si nous devrions nous attendre à une réponse du message GetBookPrice et à quoi cette réponse devrait 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 davantage 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 d’un réseau permettant d’accéder au service/aux opérations.

Voir aussi Exemples WSDL W3 annotés

113
Jono

Un message SOAP est un document XML utilisé pour transmettre vos données. WSDL est un document XML décrivant comment se connecter et adresser des demandes à votre service Web. 

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

Une recherche rapide dans Google générera de nombreuses sources de lectures supplémentaires (le lien de livre précédent est maintenant mort, pour éviter cela, toute nouvelle recommandation sera commentée)

Juste en notant vos questions spécifiques:

Tous les messages SOAP sont-ils en format WSDL? Non, ils ne sont pas du tout la même chose.

Est-ce que SOAP est un protocole qui accepte ses propres 'messages SOAP' ou 'WSDL? Non - lecture nécessaire car c'est loin.

S'ils sont différents, quand dois-je utiliser les messages SOAP et quand dois-je utiliser les fichiers WSDL? Soap est la structure que vous appliquez à votre message/vos données pour le transfert. Les WSDL servent uniquement à déterminer comment passer des appels au service. Il arrive souvent que vous ajoutiez du code pour appeler un service Web particulier une seule fois. 

75
Matthew

Un WSDL (langage de définition de service Web) 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 de savon sont les charges utiles réelles

27
scartag

Nous devons définir ce qu'est un service Web avant de dire quelles sont les différences 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, puis l'application répond à l'entrée de l'utilisateur.

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

Un service Web est essentiellement un ensemble de protocoles ouverts utilisés pour échanger des données entre des 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 exécutés sur différentes plates-formes peuvent utiliser les 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 des applications PHP, Java et Perl et bien d’autres, ce qui n’est normalement pas possible.

Comment fonctionnent les services Web?

Comme 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 des 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.

SOAP (Simple Object Access Protocol)

Simple Object Access Protocol ou SOAP est un protocole permettant d'envoyer et de recevoir des messages entre applications sans se heurter à des problèmes d'interopérabilité (l'interopérabilité signifie que la plate-forme sur laquelle un service Web est exécuté devient inutile). Un autre protocole ayant une fonction similaire est HTTP. Il est utilisé pour accéder aux pages Web ou pour surfer sur le net. HTTP garantit que vous n'avez pas à vous soucier du type de serveur Web - qu'il s'agisse d'Apache ou IIS =, vous sert les pages que vous consultez ou que les pages que vous avez vues ont été créées en ASP. NET ou HTML.

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

Vous trouverez ci-dessous un exemple de message de demande et de réponse SOAP.

SOAP Requête:

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>

SOAP Réponse:

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 demandeur utilise la méthode GetBookPrice pour obtenir le prix du livre. La réponse est effectuée par la méthode GetBookPriceResponse, qui sera le message que vous, le "demandeur", verrez. Vous pouvez également voir que les messages sont composés à l'aide de XML.

Langage de description de services Web ou WSDL

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

WSDL s'occupe de comment savoir quelles méthodes sont disponibles dans un service Web que vous tombez 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 principaux points à retenir à propos d’un fichier WSDL sont les suivants:

  • 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

  • 20
    Jad Chahine

    Une meilleure analogie que l’appel téléphonique: Commande de produits par courrier postal à partir d’un service de vente par correspondance . Le document WSDL ressemble aux instructions qui expliquent comment créer le type de bon de commande que le fournisseur de service acceptera. Le message SOAP est comme une enveloppe de conception standard (taille, forme, construction) que chaque bureau de poste du monde entier sait manipuler. Vous mettez votre formulaire de commande dans une telle enveloppe. Le réseau (Internet, par exemple) 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 XML de données utiles est le formulaire de commande que vous avez joint à l'enveloppe. Une fois l'enveloppe remise par le bureau de poste, le fournisseur de services Web l'ouvre et traite le formulaire de commande. Si vous avez créé et rempli le formulaire correctement, ils vous renverront le produit que vous avez commandé.

    6
    Israel Gale

    En termes simples si vous avez un service Web de calculatrice. WSDL décrit les fonctions que vous pouvez implémenter ou exposer au client. Par exemple: ajouter, supprimer, soustraire, etc. En utilisant SOAP, vous effectuez des actions telles que doDelete (), doSubtract (), doAdd (). Donc SOAP et WSDL sont des pommes et des oranges. Nous ne devrions pas les comparer. Ils ont tous deux leurs propres fonctionnalités. 

    4
    Unbreakable

    SAVON : C'est un protocole de communication basé sur XML standard ouvert qui est utilisé pour échanger des informations entre l'utilisateur et le service Web ou vice versa . Le feuillet est simplement le document dans lequel les données sont organisées de manière quelconque . Un savon séparé peut être présent pour chaque demande et réponse.

    WSDL: Dans soap, les données sont organisées d’une manière ou d’une autre et cette organisation est spécifiée dans WSDL. Le type de données à utiliser est également spécifié ici . Pour la demande et la réponse, un seul WSDL sera présent

    1
    arun kumar

    Le WSDL est une sorte de contrat entre le fournisseur d’API et le client, il décrit le service Web: fonction publique, champ facultatif/obligatoire ... 

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

    WSDL agit comme une interface entre l'expéditeur et le destinataire.
    Le message SOAP est une requête et une réponse au format XML.

    comparaison avec Java RMI

    WSDL est la classe d'interface
    Le message SOAP est un message de requête et de réponse marshalé.

    0
    fasil