Differenza tra un messaggio SOAP e un WSDL?


102

Sono confuso su come i messaggi SOAP e WSDL si adattano insieme? Ho iniziato a esaminare messaggi SOAP come:

    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>

Tutti i messaggi SOAP sono WSDL? SOAP è un protocollo che accetta i propri "messaggi SOAP" o "WSDL"? Se sono diversi, quando dovrei usare i messaggi SOAP e quando dovrei usare i WSDL?

Qualche chiarimento su questo sarebbe fantastico.


1
Un wsdl è una specifica di quali messaggi possono essere inviati e cosa ci si può aspettare come risposta. In un certo senso, il documento wsdl non è necessario per la comunicazione soap, ma è un elemento richiesto secondo il protocollo.
troelskn

Risposte:


121

Un documento SOAP viene inviato per richiesta. Supponiamo che fossimo un negozio di libri e che avessimo un server remoto a cui abbiamo chiesto informazioni sul prezzo corrente di un particolare libro. Supponiamo di dover trasferire il titolo del libro, il numero di pagine e il numero ISBN al server.

Ogni volta che volevamo conoscere il prezzo, inviavamo un messaggio SOAP univoco. Sarebbe simile a questo;

<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> 

E ci aspettiamo di ricevere un messaggio di risposta SOAP come;

<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>

Il WSDL descrive quindi come gestire / elaborare questo messaggio quando un server lo riceve. Nel nostro caso, descrive quali tipi sarebbero il Titolo, NumPages e ISBN, se dobbiamo aspettarci una risposta dal messaggio GetBookPrice e come dovrebbe essere tale risposta.

I tipi sarebbero simili a questo;

<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>

Ma il WSDL contiene anche ulteriori informazioni, su quali funzioni si collegano insieme per effettuare operazioni e quali operazioni sono disponibili nel servizio e dove si trova su una rete è possibile accedere al servizio / operazioni.

Vedere anche W3 Esempi WSDL con annotazioni


4
Quando dici questa riga "Il WSDL descrive quindi come gestire / elaborare questo messaggio quando un server lo riceve." Non pensi che ci sia qualcosa che non va qui. Penso che WSDL sia più che il cliente sappia quali sono i servizi che vengono esposti al client. Non credo che guidi la gestione o l'elaborazione dei messaggi al server. Ho senso?
Unbreakable

76

Un messaggio SOAP è un documento XML utilizzato per trasmettere i dati. WSDL è un documento XML che descrive come connettersi ed effettuare richieste al tuo servizio web.

Fondamentalmente i messaggi SOAP sono i dati che trasmetti, WSDL ti dice cosa puoi fare e come effettuare le chiamate.

Una rapida ricerca in Google produrrà molte fonti per ulteriori letture (il link del libro precedente ora è morto, per combattere questo metterà nuovi consigli nei commenti)

Notando solo le tue domande specifiche:

Tutti i messaggi SOAP sono WSDL? No, non sono affatto la stessa cosa.

SOAP è un protocollo che accetta i propri "messaggi SOAP" o "WSDL"? No - lettura richiesta in quanto è lontana.

Se sono diversi, quando dovrei usare i messaggi SOAP e quando dovrei usare i WSDL? Il sapone è la struttura che applichi al tuo messaggio / dati per il trasferimento. I WSDL vengono utilizzati solo per determinare come effettuare chiamate al servizio in primo luogo. Spesso questa è una cosa una tantum quando aggiungi per la prima volta il codice per effettuare una chiamata a un particolare servizio web.


Sono confuso cosa intendi per "cosa una tantum" se potessi elaborare con alcuni messaggi di esempio che sarebbe fantastico. Inoltre, stai dicendo che i messaggi WSDL e SOAP vengono usati insieme?
James,

6
WSDL ti dice come chiamare il servizio web. Spesso si utilizzerà WSDL per generare automaticamente il codice per chiamare il servizio Web e quindi non utilizzarlo mai più. Scorrere i capitoli del libro che ho collegato dovrebbe aiutare.
Matteo

27

Un WSDL (Web Service Definition Language) è un file di metadati che descrive il servizio web.

Cose come il nome dell'operazione, i parametri ecc.

I messaggi soap sono i carichi utili effettivi


25

Dobbiamo definire cosa sia un servizio web prima di dire quali sono le differenze tra SOAP e WSDL dove i due (SOAP e WSDL) sono componenti di un servizio web

La maggior parte delle applicazioni sono sviluppate per interagire con gli utenti, l'utente immette o cerca dati tramite un'interfaccia e l'applicazione risponde quindi all'input dell'utente.

Un servizio Web fa più o meno la stessa cosa tranne che un'applicazione di servizio Web comunica solo da macchina a macchina o da applicazione a applicazione. Spesso non c'è interazione diretta dell'utente.

Un servizio Web è fondamentalmente una raccolta di protocolli aperti utilizzati per lo scambio di dati tra le applicazioni. L'utilizzo di protocolli aperti consente ai servizi Web di essere indipendenti dalla piattaforma. Il software scritto in diversi linguaggi di programmazione e che viene eseguito su piattaforme diverse può utilizzare i servizi Web per lo scambio di dati su reti di computer come Internet. In altre parole, le applicazioni Windows possono dialogare con PHP, Java e Perl e molte altre, cosa che in circostanze normali non sarebbe possibile.

Come funzionano i servizi Web?

Poiché applicazioni diverse sono scritte in linguaggi di programmazione diversi, spesso non possono comunicare tra loro. Un servizio Web consente questa comunicazione utilizzando una combinazione di protocolli e standard aperti, principalmente XML, SOAP e WSDL. Un servizio Web utilizza XML per contrassegnare i dati, SOAP per trasferire un messaggio e infine WSDL per descrivere la disponibilità dei servizi. Diamo un'occhiata a questi tre componenti principali di un'applicazione di servizio Web.

Simple Object Access Protocol (SOAP)

Il Simple Object Access Protocol o SOAP è un protocollo per l'invio e la ricezione di messaggi tra applicazioni senza affrontare problemi di interoperabilità (l'interoperabilità significa che la piattaforma su cui è in esecuzione un servizio Web diventa irrilevante). Un altro protocollo che ha una funzione simile è HTTP. Viene utilizzato per accedere a pagine Web o per navigare in rete. HTTP garantisce che non devi preoccuparti del tipo di server Web, che sia Apache, IIS o qualsiasi altro, ti serve le pagine che stai visualizzando o se le pagine che visualizzi sono state create in ASP.NET o HTML.

Poiché SOAP viene utilizzato sia per la richiesta che per la risposta, il suo contenuto varia leggermente a seconda del suo scopo.

Di seguito è riportato un esempio di richiesta SOAP e messaggio di risposta

Richiesta 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>

Risposta 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> 

Sebbene entrambi i messaggi abbiano lo stesso aspetto, eseguono metodi diversi. Ad esempio, guardando gli esempi sopra, puoi vedere che il messaggio di richiesta utilizza il GetBookPricemetodo per ottenere il prezzo del libro. La risposta viene eseguita con il GetBookPriceResponsemetodo, che sarà il messaggio che vedrai tu come "richiedente". Puoi anche vedere che i messaggi sono composti utilizzando XML.

Linguaggio di descrizione dei servizi Web o WSDL

WSDL è un documento che descrive un servizio Web e spiega anche come accedere e utilizzare i suoi metodi.

WSDL si occupa di sapere quali metodi sono disponibili in un servizio Web in cui ci si imbatte in Internet.

Dai un'occhiata a un file WSDL di esempio:

<?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> 

Le cose principali da ricordare su un file WSDL sono che ti fornisce:

  • Una descrizione di un servizio Web

  • I metodi utilizzati da un servizio Web e i parametri utilizzati

  • Un modo per individuare i servizi Web


  • Descrizione concreta
    TapanHP

    7

    Migliore analogia della telefonata: ordinare prodotti tramite posta ordinaria da un servizio di vendita per corrispondenza. Il documento WSDL è come le istruzioni che spiegano come creare il tipo di moduli d'ordine che il fornitore di servizi accetterà. Un messaggio SOAP è come una busta con un design standard (dimensioni, forma, costruzione) che ogni ufficio postale nel mondo sa come gestire. Metti il ​​tuo modulo d'ordine in una tale busta. La rete (ad esempio Internet) è il servizio postale. Metti la tua busta nella posta. I dipendenti del servizio postale non guardano dentro la busta. Il payload XML è il modulo d'ordine che hai incluso nella busta. Dopo che l'ufficio postale ha consegnato la busta, il fornitore di servizi Web apre la busta ed elabora il modulo d'ordine. Se hai creato e compilato correttamente il modulo,


    4

    In termini semplici se si dispone di un servizio web di calcolatrice. WSDL racconta le funzioni che puoi implementare o esporre al client. Ad esempio: aggiungi, elimina, sottrai e così via. Mentre usando SOAP effettui azioni come doDelete (), doSubtract (), doAdd (). Quindi SOAP e WSDL sono mele e arance. Non dovremmo confrontarli. Entrambi hanno la loro funzionalità diversa.


    1

    SOAP: è un protocollo di comunicazione basato su XML a standard aperto che viene utilizzato per lo scambio di informazioni dall'utente al servizio web o viceversa. La soap è solo il documento in cui i dati sono organizzati in qualche modo. Per ogni richiesta e risposta può essere presente un sapone separato.

    WSDL: In soap i dati sono organizzati in qualche modo e questa organizzazione è specificata in WSDL, Anche il tipo di dati che deve essere usato è specificato qui. Per richiesta e risposta sarà presente un unico WSDL


    0

    Il WSDL è una sorta di contratto tra il provider di API e il client che descrive il servizio web: la funzione pubblica, campo facoltativo / obbligatorio ...

    Ma il messaggio soap è un dato trasferito tra client e provider (payload)


    0

    WSDL funge da interfaccia tra mittente e destinatario.
    Il messaggio SOAP è una richiesta e una risposta in formato xml.

    confronto con java RMI

    WSDL è il
    messaggio SOAP della classe di interfaccia è il messaggio di richiesta e risposta di marshalling.


    -1

    Possiamo considerare una telefonata in quel numero è wsdl e lo scambio di informazioni è sapone.

    WSDL è la descrizione di come connettersi con il server di comunicazione.SOAP è avere messaggi di comunicazione.


    1
    No, il numero di telefono sarebbe più simile a uno degli endpoint definiti nel WSDL. Non esiste un vero equivalente a WSDL nel dominio delle telefonate. Il più vicino potrebbe essere un elenco telefonico, soprattutto se includi il concetto di "pagine gialle" che classifica le aziende e fornisce alcuni dettagli sull'attività (non solo il numero di telefono).
    John Saunders
    Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
    Licensed under cc by-sa 3.0 with attribution required.