¿Diferencia entre un mensaje SOAP y un WSDL?

102

Estoy confundido acerca de cómo encajan los mensajes SOAP y WSDL. Empecé a buscar mensajes SOAP como:

    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>

¿Todos los mensajes SOAP son WSDL? ¿Es SOAP un protocolo que acepta sus propios 'mensajes SOAP' o 'WSDL's? Si son diferentes, ¿cuándo debo usar mensajes SOAP y cuándo debo usar WSDL?

Algunas aclaraciones sobre esto serían asombrosas.

James
fuente
1
Un wsdl es una especificación de qué mensajes se pueden enviar y qué se puede esperar como respuesta. En cierto sentido, el documento wsdl no es necesario para la comunicación del jabón, pero es un elemento obligatorio según el protocolo.
troelskn

Respuestas:

121

Se envía un documento SOAP por solicitud. Digamos que éramos una librería y teníamos un servidor remoto que consultamos para conocer el precio actual de un libro en particular. Supongamos que necesitamos pasar el título del libro, el número de páginas y el número ISBN al servidor.

Siempre que quisiéramos saber el precio, enviábamos un mensaje SOAP único. Se vería algo así;

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

Y esperamos recibir un mensaje de respuesta SOAP como;

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

El WSDL luego describe cómo manejar / procesar este mensaje cuando un servidor lo recibe. En nuestro caso, describe qué tipos serían el Título, NumPages e ISBN, si deberíamos esperar una respuesta del mensaje GetBookPrice y cómo debería verse esa respuesta.

Los tipos se verían así;

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

Pero el WSDL también contiene más información sobre qué funciones se vinculan entre sí para realizar operaciones, qué operaciones están disponibles en el servicio y dónde puede acceder al servicio / operaciones en una red.

Consulte también Ejemplos de WSDL anotados de W3

Jono
fuente
4
Cuando dice esta línea "El WSDL luego describe cómo manejar / procesar este mensaje cuando un servidor lo recibe". ¿No crees que hay algo mal aquí? Creo que WSDL es más para que el cliente sepa cuáles son los servicios que se exponen al cliente. No creo que oriente el manejo o procesamiento de mensajes al servidor. ¿Tengo sentido?
Unbreakable
76

Un mensaje SOAP es un documento XML que se utiliza para transmitir sus datos. WSDL es un documento XML que describe cómo conectarse y realizar solicitudes a su servicio web.

Básicamente, los mensajes SOAP son los datos que transmite, WSDL le dice qué puede hacer y cómo realizar las llamadas.

Una búsqueda rápida en Google arrojará muchas fuentes para lectura adicional (el enlace del libro anterior ahora está muerto, para combatir esto pondrá nuevas recomendaciones en los comentarios)

Solo anotando sus preguntas específicas:

¿Todos los mensajes SOAP son WSDL? No, no son lo mismo en absoluto.

¿Es SOAP un protocolo que acepta sus propios 'mensajes SOAP' o 'WSDL's? No, se requiere lectura ya que está lejos.

Si son diferentes, ¿cuándo debo usar mensajes SOAP y cuándo debo usar WSDL? El jabón es la estructura que aplica a su mensaje / datos para transferir. Los WSDL se utilizan solo para determinar cómo realizar llamadas al servicio en primer lugar. A menudo, esto ocurre una sola vez cuando agrega código por primera vez para realizar una llamada a un servicio web en particular.

Mateo
fuente
Estoy confundido de lo que quiere decir con "algo de una sola vez" si pudiera desarrollar algunos mensajes de muestra que serían increíbles. Además, ¿está diciendo que los mensajes WSDL y SOAP se usan juntos?
James
6
WSDL le indica cómo llamar al servicio web. Con frecuencia, usará el WSDL para generar automáticamente el código para llamar al servicio web y luego nunca volver a usarlo. Leer los capítulos del libro que vinculé debería ayudar.
Mateo
27

Un WSDL (lenguaje de definición de servicios web) es un archivo de metadatos que describe el servicio web.

Cosas como nombre de la operación, parámetros, etc.

Los mensajes de jabón son las cargas útiles reales

scartag
fuente
25

Necesitamos definir qué es un servicio web antes de decir cuál es la diferencia entre SOAP y WSDL donde los dos (SOAP y WSDL) son componentes de un servicio web

La mayoría de las aplicaciones se desarrollan para interactuar con los usuarios, el usuario ingresa o busca datos a través de una interfaz y la aplicación luego responde a la entrada del usuario.

Un servicio web hace más o menos lo mismo excepto que una aplicación de servicio web se comunica solo de máquina a máquina o de aplicación a aplicación. A menudo no hay interacción directa con el usuario.

Un servicio web básicamente es una colección de protocolos abiertos que se utiliza para intercambiar datos entre aplicaciones. El uso de protocolos abiertos permite que los servicios web sean independientes de la plataforma. El software que está escrito en diferentes lenguajes de programación y que se ejecuta en diferentes plataformas puede utilizar servicios web para intercambiar datos a través de redes informáticas como Internet. En otras palabras, las aplicaciones de Windows pueden comunicarse con aplicaciones PHP, Java y Perl y muchas otras, lo que en circunstancias normales no sería posible.

¿Cómo funcionan los servicios web?

Debido a que las diferentes aplicaciones están escritas en diferentes lenguajes de programación, a menudo no pueden comunicarse entre sí. Un servicio web permite esta comunicación mediante el uso de una combinación de protocolos y estándares abiertos, principalmente XML, SOAP y WSDL. Un servicio web usa XML para etiquetar datos, SOAP para transferir un mensaje y finalmente WSDL para describir la disponibilidad de los servicios. Echemos un vistazo a estos tres componentes principales de una aplicación de servicio web.

Protocolo simple de acceso a objetos (SOAP)

El Protocolo simple de acceso a objetos o SOAP es un protocolo para enviar y recibir mensajes entre aplicaciones sin enfrentar problemas de interoperabilidad (interoperabilidad, lo que significa que la plataforma en la que se ejecuta un servicio web se vuelve irrelevante). Otro protocolo que tiene una función similar es HTTP. Se utiliza para acceder a páginas web o para navegar por la red. HTTP garantiza que no tenga que preocuparse por el tipo de servidor web, ya sea Apache o IIS o cualquier otro, que le proporcione las páginas que está viendo o si las páginas que ve fueron creadas en ASP.NET o HTML.

Debido a que SOAP se usa tanto para solicitar como para responder, su contenido varía ligeramente según su propósito.

A continuación se muestra un ejemplo de un mensaje de solicitud y respuesta SOAP

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

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

Aunque ambos mensajes tienen el mismo aspecto, utilizan métodos diferentes. Por ejemplo, al observar los ejemplos anteriores, puede ver que el mensaje de solicitud utiliza el GetBookPricemétodo para obtener el precio del libro. La respuesta la lleva a cabo elGetBookPriceResponse método, que será el mensaje que verá usted como "solicitante". También puede ver que los mensajes se componen utilizando XML.

Lenguaje de descripción de servicios web o WSDL

WSDL es un documento que describe un servicio web y también le indica cómo acceder y utilizar sus métodos.

WSDL se ocupa de cómo saber qué métodos están disponibles en un servicio web con el que se tropieza en Internet.

Eche un vistazo a un archivo WSDL de muestra:

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

Lo principal que debe recordar acerca de un archivo WSDL es que le proporciona:

  • Una descripción de un servicio web

  • Los métodos que usa un servicio web y los parámetros que toma

  • Una forma de localizar servicios web

  • Jad Chahine
    fuente
    Descripción concreta
    TapanHP
    7

    Mejor analogía que la llamada telefónica: pedir productos por correo postal a un servicio de pedido por correo. El documento WSDL es como las instrucciones que explican cómo crear el tipo de formularios de pedido que aceptará el proveedor de servicios. Un mensaje SOAP es como un sobre con un diseño estándar (tamaño, forma, construcción) que todas las oficinas de correos del mundo saben cómo manejar. Pones tu formulario de pedido en dicho sobre. La red (por ejemplo, Internet) es el servicio postal. Pones tu sobre en el correo. Los empleados del servicio postal no miran dentro del sobre. El XML de carga útil es el formulario de pedido que ha incluido en el sobre. Una vez que la oficina de correos entrega el sobre, el proveedor de servicios web abre el sobre y procesa el formulario de pedido. Si ha creado y completado el formulario correctamente,

    Israel Gale
    fuente
    4

    En pocas palabras, si tienes un servicio web de calculadora. WSDL informa sobre las funciones que puede implementar o exponer al cliente. Por ejemplo: sumar, eliminar, restar y así sucesivamente. Donde, al usar SOAP, en realidad realiza acciones como doDelete (), doSubtract (), doAdd (). Entonces SOAP y WSDL son manzanas y naranjas. No debemos compararlos. Ambos tienen su propia funcionalidad diferente.

    Irrompible
    fuente
    1

    SOAP: es un protocolo de comunicación estándar abierto basado en XML que se utiliza para intercambiar información del usuario al servicio web o viceversa. El jabón es solo el documento en el que los datos están organizados de alguna manera. Para cada solicitud y respuesta, puede haber jabón por separado.

    WSDL: En soap los datos se organizan de alguna manera y esta organización se especifica en WSDL. El tipo de datos que se debe utilizar también se especifica aquí. Para la solicitud y respuesta, habrá un único WSDL

    arun kumar
    fuente
    0

    El WSDL es una especie de contrato entre el proveedor de API y el cliente, describe el servicio web: la función pública, campo opcional / obligatorio ...

    Pero el mensaje de jabón es un dato transferido entre el cliente y el proveedor (carga útil)

    Abderrahim Soubai-Elidrisi
    fuente
    0

    WSDL actúa como una interfaz entre el remitente y el receptor.
    El mensaje SOAP es solicitud y respuesta en formato xml.

    comparando con Java RMI

    WSDL es la clase de interfaz. El
    mensaje SOAP es un mensaje de solicitud y respuesta calculado.

    fasil
    fuente
    -1

    Podemos considerar una llamada telefónica En ese Número es wsdl y el intercambio de información es jabón.

    WSDL es una descripción de cómo conectarse con el servidor de comunicaciones. SOAP tiene mensajes de comunicación.

    khushbu
    fuente
    1
    No, el número de teléfono sería más parecido a uno de los puntos finales definidos en el WSDL. No existe un equivalente real de WSDL en el ámbito de las llamadas telefónicas. Lo más cercano podría ser un directorio telefónico, especialmente si incluye el concepto de "páginas amarillas" que clasifica las empresas y proporciona algunos detalles sobre la empresa (no solo el número de teléfono).
    John Saunders