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 GetBookPrice
mé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