Tutorial de servicios web SOAP: ¿Qué es el protocolo SOAP? EJEMPLO

¿Qué es SOAP?

SOAP es un protocolo basado en XML para acceder a servicios web a través de HTTP. Tiene alguna especificación que podría usarse en todas las aplicaciones.

SOAP se conoce como el Protocolo simple de acceso a objetos, pero en tiempos posteriores simplemente se redujo a SOAP v1.2. SOAP es un protocolo o, en otras palabras, es una definición de cómo los servicios web se comunican entre sí o se comunican con las aplicaciones cliente que los invocan.

SOAP se desarrolló como un lenguaje intermedio para que las aplicaciones creadas en varios lenguajes de programación pudieran comunicarse fácilmente entre sí y evitar el esfuerzo de desarrollo extremo.

En este tutorial de servicios web SOAP, aprenderá:

  • Introducción a SOAP
  • Ventajas de SOAP
  • Bloques de construcción de SOAP
  • Estructura del mensaje SOAP
  • Elemento de sobre SOAP
  • Modelo de comunicación SOAP
  • Ejemplo práctico de SOAP

Introducción a SOAP

En el mundo actual, existe una gran cantidad de aplicaciones que se basan en diferentes lenguajes de programación. Por ejemplo, podría haber una aplicación web diseñada en Java, otra en .Net y otra en PHP.

El intercambio de datos entre aplicaciones es crucial en el mundo en red actual. Pero el intercambio de datos entre estas aplicaciones heterogéneas sería complejo. También será la complejidad del código para lograr este intercambio de datos.

Uno de los métodos utilizados para combatir esta complejidad es utilizar XML (Extensible Markup Language) como lenguaje intermedio para intercambiar datos entre aplicaciones.

Todos los lenguajes de programación pueden comprender el lenguaje de marcado XML. Por tanto, XML se utilizó como medio subyacente para el intercambio de datos.

Pero no existen especificaciones estándar sobre el uso de XML en todos los lenguajes de programación para el intercambio de datos. Ahí es donde entra en juego el software SOAP.

SOAP fue diseñado para trabajar con XML sobre HTTP y tiene algún tipo de especificación que podría usarse en todas las aplicaciones. Veremos más detalles sobre el protocolo SOAP en los capítulos siguientes.

Ventajas de SOAP

SOAP es el protocolo utilizado para el intercambio de datos entre aplicaciones. A continuación se muestran algunas de las razones por las que se utiliza SOAP.

  • Al desarrollar servicios web basados ​​en SOAP, necesita tener algo de lenguaje que pueda usarse para que los servicios web se comuniquen con las aplicaciones cliente. SOAP es el medio perfecto que se desarrolló para lograr este propósito. Este protocolo también es recomendado por el consorcio W3C, que es el organismo rector de todos los estándares web.
  • SOAP es un protocolo ligero que se utiliza para el intercambio de datos entre aplicaciones. Tenga en cuenta la palabra clave ' luz '. Dado que la programación SOAP se basa en el lenguaje XML, que en sí mismo es un lenguaje de intercambio de datos liviano, SOAP es un protocolo que también cae en la misma categoría.
  • SOAP está diseñado para ser independiente de la plataforma y también está diseñado para ser independiente del sistema operativo. Por lo tanto, el protocolo SOAP puede funcionar con cualquier aplicación basada en lenguaje de programación en plataformas Windows y Linux.
  • Funciona con el protocolo HTTP -SOAP funciona con el protocolo HTTP, que es el protocolo predeterminado utilizado por todas las aplicaciones web. Por lo tanto, no se requiere ningún tipo de personalización para ejecutar los servicios web construidos en el protocolo SOAP para que funcionen en la World Wide Web.

Bloques de creación de SOAP

La especificación SOAP define algo conocido como " mensaje SOAP ", que es lo que se envía al servicio web y la aplicación cliente.

El siguiente diagrama de la arquitectura SOAP muestra los distintos componentes básicos de un mensaje SOAP.

Bloques de creación de mensajes SOAP

El mensaje SOAP no es más que un mero documento XML que tiene los siguientes componentes.

  • Un elemento Envelope que identifica el documento XML como un mensaje SOAP: esta es la parte que contiene el mensaje SOAP y se utiliza para encapsular todos los detalles en el mensaje SOAP. Este es el elemento raíz del mensaje SOAP.
  • Un elemento de encabezado que contiene información de encabezado: el elemento de encabezado puede contener información como credenciales de autenticación que puede utilizar la aplicación que realiza la llamada. También puede contener la definición de tipos complejos que podrían usarse en el mensaje SOAP. De forma predeterminada, el mensaje SOAP puede contener parámetros que pueden ser de tipos simples, como cadenas y números, pero también pueden ser un tipo de objeto complejo.

A continuación se muestra un ejemplo de servicio SOAP simple de un tipo complejo.

Supongamos que queremos enviar un tipo de datos estructurado que tiene una combinación de un "Nombre de tutorial" y una "Descripción de tutorial", luego definiríamos el tipo complejo como se muestra a continuación.

El tipo complejo está definido por la etiqueta de elemento . Todos los elementos necesarios de la estructura junto con sus respectivos tipos de datos se definen luego en la colección de tipos complejos.

  • Un elemento Body que contiene información de llamada y respuesta: este elemento es el que contiene los datos reales que deben enviarse entre el servicio web y la aplicación que realiza la llamada. A continuación se muestra un ejemplo de servicio web SOAP del cuerpo SOAP que realmente funciona en el tipo complejo definido en la sección de encabezado. Aquí está la respuesta del nombre del tutorial y la descripción del tutorial que se envía a la aplicación que llama a este servicio web.
Web ServicesAll about web services

Estructura del mensaje SOAP

Una cosa a tener en cuenta es que los mensajes SOAP normalmente son generados automáticamente por el servicio web cuando se llama.

Siempre que una aplicación cliente llame a un método en el servicio web, el servicio web generará automáticamente un mensaje SOAP que tendrá los detalles necesarios de los datos que se enviarán desde el servicio web a la aplicación cliente.

Como se discutió en el tema anterior de este tutorial SOAP, un mensaje SOAP simple tiene los siguientes elementos:

  • El elemento Envelope
  • El elemento de encabezado y
  • El elemento del cuerpo
  • El elemento de falla (opcional)

Veamos un ejemplo a continuación de un mensaje SOAP simple y veamos qué elemento realmente hace.

Estructura del mensaje SOAP
  1. Como se ve en el mensaje SOAP anterior, la primera parte del mensaje SOAP es el elemento de sobre que se utiliza para encapsular todo el mensaje SOAP.
  2. El siguiente elemento es el cuerpo SOAP que contiene los detalles del mensaje real.
  3. Nuestro mensaje contiene un servicio web que tiene el nombre de "Guru99WebService".
  4. El "Guru99Webservice" acepta un parámetro del tipo 'int' y tiene el nombre de TutorialID.

Ahora, el mensaje SOAP anterior se pasará entre el servicio web y la aplicación cliente.

Puede ver lo útil que es la información anterior para la aplicación cliente. El mensaje SOAP le dice a la aplicación cliente cuál es el nombre del servicio web, y también qué parámetros espera y también cuál es el tipo de cada parámetro que toma el servicio web.

Elemento de sobre SOAP

El primer bit del bloque de construcción es el SOAP Envelope.

El SOAP Envelope se utiliza para encapsular todos los detalles necesarios de los mensajes SOAP, que se intercambian entre el servicio web y la aplicación cliente.

El elemento de sobre SOAP se utiliza para indicar el comienzo y el final de un mensaje SOAP. Esto permite que la aplicación cliente que llama al servicio web sepa cuándo finaliza el mensaje SOAP.

Los siguientes puntos se pueden anotar en el elemento de sobre SOAP.

  • Cada mensaje SOAP debe tener un elemento Envelope raíz. Es absolutamente obligatorio que el mensaje SOAP tenga un elemento de sobre.
  • Cada elemento de Envelope debe tener al menos un elemento de cuerpo de jabón.
  • Si un elemento Envelope contiene un elemento de encabezado, no debe contener más de uno y debe aparecer como el primer elemento secundario del Envelope, antes del elemento del cuerpo.
  • El sobre cambia cuando cambian las versiones de SOAP.
  • Un procesador SOAP compatible con v1.1 genera un error al recibir un mensaje que contiene el espacio de nombres del sobre v1.2.
  • Un procesador SOAP compatible con v1.2 genera un error de no coincidencia de versión si recibe un mensaje que no incluye el espacio de nombres del sobre v1.2.

A continuación se muestra un ejemplo de API SOAP de la versión 1.2 del elemento de sobre SOAP.

int

El mensaje de falla

Cuando se realiza una solicitud a un servicio web SOAP, la respuesta devuelta puede ser de 2 formas, que son una respuesta exitosa o una respuesta de error. Cuando se genera un éxito, la respuesta del servidor siempre será un mensaje SOAP. Pero si se generan fallas SOAP, se devuelven como errores "HTTP 500".

El mensaje SOAP Fault consta de los siguientes elementos.

  1. : este es el código que designa el código del error. El código de falla puede ser cualquiera de los valores siguientes
    1. SOAP-ENV: VersionMismatch: esto es cuando se encuentra un espacio de nombres no válido para el elemento SOAP Envelope.
    2. SOAP-ENV: MustUnderstand: no se entendió un elemento secundario inmediato del elemento Header, con el atributo mustUnderstand establecido en "1".
    3. SOAP-ENV: Cliente: el mensaje se formó incorrectamente o contenía información incorrecta.
    4. SOAP-ENV: Servidor: hubo un problema con el servidor, por lo que el mensaje no pudo continuar.
  2. : este es el mensaje de texto que brinda una descripción detallada del error.
  3. (opcional) : esta es una cadena de texto que indica quién causó la falla.
  4. (Opcional) : este es el elemento para los mensajes de error específicos de la aplicación. Por lo tanto, la aplicación podría tener un mensaje de error específico para diferentes escenarios de lógica empresarial.

Ejemplo de mensaje de error

A continuación se ofrece un ejemplo de mensaje de error. El error se genera si el escenario en el que el cliente intenta utilizar un método llamado TutorialID en la clase GetTutorial.

El siguiente mensaje de error se genera en caso de que el método no exista en la clase definida.

SOAP-ENV:ClientFailed to locate method (GetTutorialID) in class (GetTutorial)

Producción:

Cuando ejecute el código anterior, mostrará el error como "No se pudo localizar el método (GetTutorialID) en la clase (GetTutorial)"

Modelo de comunicación SOAP

Toda la comunicación por SOAP se realiza a través del protocolo HTTP. Antes de SOAP, muchos servicios web utilizaban el estilo estándar de RPC (llamada a procedimiento remoto) para la comunicación. Este era el tipo de comunicación más simple, pero tenía muchas limitaciones.

Ahora, en este tutorial de la API de SOAP, consideremos el siguiente diagrama para ver cómo funciona esta comunicación. En este ejemplo, supongamos que el servidor aloja un servicio web que proporciona 2 métodos como

  • GetEmployee : esto obtendría todos los detalles del empleado
  • SetEmployee : esto establecería el valor de los detalles como departamento de empleados, salario, etc. en consecuencia.

En la comunicación de estilo RPC normal, el cliente simplemente llamaría a los métodos en su solicitud y enviaría los parámetros requeridos al servidor, y el servidor luego enviaría la respuesta deseada.

El modelo de comunicación anterior tiene las siguientes limitaciones graves

  1. No independiente del idioma : el servidor que aloja los métodos estaría en un lenguaje de programación en particular y normalmente las llamadas al servidor serían solo en ese lenguaje de programación.
  2. No es el protocolo estándar : cuando se realiza una llamada al procedimiento remoto, la llamada no se realiza a través del protocolo estándar. Esto era un problema ya que la mayoría de las comunicaciones a través de la web tenían que realizarse a través del protocolo HTTP.
  3. Cortafuegos : dado que las llamadas RPC no se realizan a través del protocolo normal, es necesario abrir puertos separados en el servidor para permitir que el cliente se comunique con el servidor. Normalmente, todos los cortafuegos bloquearían este tipo de tráfico y, por lo general, se requirió mucha configuración para garantizar que este tipo de comunicación entre el cliente y el servidor funcionara.

Para superar todas las limitaciones citadas anteriormente, SOAP utilizaría el siguiente modelo de comunicación

  1. El cliente formatearía la información sobre la llamada al procedimiento y cualquier argumento en un mensaje SOAP y lo enviaría al servidor como parte de una solicitud HTTP. Este proceso de encapsular los datos en un mensaje SOAP se conocía como Marshalling.
  2. Luego, el servidor desenvolvería el mensaje enviado por el cliente, vería lo que solicitó el cliente y luego enviaría la respuesta adecuada al cliente como un mensaje SOAP. La práctica de desenvolver una solicitud enviada por el cliente se conoce como Demarshalling.

Ejemplo práctico de SOAP

Ahora, en este tutorial de SoapUI, veamos un ejemplo práctico de SOAP,

Probablemente una de las mejores formas de ver cómo se generan los mensajes SOAP es ver realmente un servicio web en acción.

Este tema analizará el uso del marco Microsoft.Net para crear un servicio web ASMX. Este tipo de servicio web admite tanto la versión 1.1 como la 1.2 de SOAP.

Los servicios web ASMX generan automáticamente el documento de lenguaje de definición de servicios web (WSDL). La aplicación cliente que realiza la llamada requiere este documento WSDL para que la aplicación sepa lo que el servicio web es capaz de hacer.

En nuestro ejemplo, vamos a crear un servicio web simple, que se utilizará para devolver una cadena a la aplicación que llama al servicio web.

Este servicio web se alojará en una aplicación web Asp.Net. Luego, invocaremos el servicio web y veremos el resultado que devuelve el servicio web.

Visual Studio también nos mostrará cuál es el mensaje SOAP que se pasa entre el servicio web y la aplicación que realiza la llamada.

El primer requisito previo para configurar nuestra aplicación de servicio web, que se puede realizar siguiendo los pasos a continuación.

Asegúrese de tener Visual Studio 2013 instalado en su sistema para este ejemplo.

Paso 1) El primer paso es crear una aplicación web ASP.Net vacía. Desde Visual Studio 2013, haga clic en la opción de menú Archivo-> Nuevo proyecto.

Una vez que haga clic en la opción Nuevo proyecto, Visual Studio le dará otro cuadro de diálogo para elegir el tipo de proyecto y proporcionar los detalles necesarios del proyecto. Esto se explica en el siguiente paso.

Paso 2) En este paso,

  1. Asegúrese de elegir primero la plantilla web C # de la aplicación web ASP.NET. El proyecto debe ser de este tipo para poder crear un proyecto de servicios SOAP. Al elegir esta opción, Visual Studio llevará a cabo los pasos necesarios para agregar los archivos requeridos que son requeridos por cualquier aplicación basada en web.
  2. Dé un nombre a su proyecto que en nuestro caso se ha dado como webservice.asmx. Luego, asegúrese de proporcionar una ubicación donde se almacenarán los archivos del proyecto.

Una vez hecho esto, verá el archivo de proyecto creado en su explorador de soluciones en Visual Studio 2013.

Paso 3) En este paso,

Vamos a agregar un archivo de servicio web a nuestro proyecto.

  1. Primero, haga clic derecho en el archivo del proyecto como se muestra a continuación

  1. Una vez que haga clic con el botón derecho en el archivo del proyecto, tendrá la oportunidad de elegir la opción "Agregar-> Servicio web (ASMX) para agregar un archivo de servicio web. Simplemente proporcione un nombre de Servicio de tutorial para el archivo de nombre del servicio web.

Paso 4) Agregue el siguiente código a su archivo asmx de Tutorial Service.

Explicación del código:

  1. Esta línea de código proporciona un nombre para su archivo de servicio web. Este es un paso importante porque da paso a que la aplicación cliente llame al servicio web a través del nombre del servicio web.
  2. Normalmente, un archivo de clase se utiliza para encapsular la funcionalidad de un servicio web. Entonces, el archivo de clase tendrá la definición de todos los métodos web que proporcionarán alguna funcionalidad a la aplicación cliente.
  3. Aquí [WebMethod] se conoce como un atributo que describe una función. El siguiente paso crea una función llamada "Guru99WebService", pero con la inclusión de este paso de agregar un atributo [WebMethod] se asegura de que este método pueda ser invocado por una aplicación cliente. Si este atributo no está en su lugar, una aplicación cliente nunca podrá llamar al método.
  4. Aquí estamos definiendo una función llamada 'Guru99WebService' que se utilizará para devolver una cadena a la aplicación cliente que realiza la llamada. Esta función es un servicio web al que puede llamar cualquier aplicación cliente.
  5. Estamos usando la declaración de retorno para devolver la cadena "Este es un servicio web Guru99" a la aplicación cliente.

Si el código se ejecuta correctamente, se mostrará el siguiente resultado cuando ejecute su código en el navegador.

Producción:

  • El resultado muestra claramente que el nombre de nuestro servicio web es "Servicio web Guru99", que es el resultado de dar un nombre a nuestro servicio web.
  • También podemos ver que podemos invocar el servicio web. Si hacemos clic en el botón Invocar, obtendremos la siguiente respuesta en el navegador web.

La salida anterior,

  • Muestra claramente que al invocar el método web, se devuelve la cadena "Este es un servicio web Guru99".
  • Visual Studio también le permite ver la solicitud y respuesta del mensaje SOAP que se genera cuando se llama al servicio web anterior.

La solicitud SOAP que se genera cuando se llama al servicio web se muestra a continuación.

Explicación del código:

  1. La primera parte del mensaje SOAP es el elemento del sobre, que es lo que se discutió en los capítulos anteriores. Este es el elemento de encapsulación que está presente en cada mensaje SOAP.
  2. El cuerpo SOAP es el siguiente elemento y contiene los detalles reales del mensaje SOAP.
  3. La tercera parte es el elemento que especifica que queremos llamar al servicio que se llama 'Guru99WebService'.

string

Explicación del código:

  1. La primera parte del mensaje SOAP es el elemento del sobre, que es lo que se discutió en los capítulos anteriores. Este es el elemento de encapsulación que está presente en cada mensaje SOAP.
  2. El cuerpo SOAP es el siguiente elemento y contiene los detalles reales del mensaje SOAP.
  3. La parte interesante que verá ahora es el atributo 'cadena'. Esto le dice a la aplicación cliente que el servicio web que se llama devuelve un objeto del tipo cadena. Esto es muy útil porque si la aplicación cliente no sabría lo que devuelve el servicio web.

Resumen

  • SOAP es un protocolo que se utiliza para intercambiar datos entre aplicaciones que se basan en diferentes lenguajes de programación.
  • SOAP se basa en la especificación XML y funciona con el protocolo HTTP. Esto lo hace perfecto para su uso en aplicaciones web.
  • Los componentes básicos de SOAP constan de un mensaje SOAP. Cada mensaje SOAP consta de un elemento de sobre, un encabezado y un elemento de cuerpo.
  • El elemento de sobre es el elemento obligatorio en el mensaje SOAP y se utiliza para encapsular todos los datos en el mensaje SOAP.
  • El elemento de encabezado se puede utilizar para contener información como información de autenticación o la definición de tipos de datos complejos.
  • El elemento body es el elemento principal que contiene la definición de los métodos web junto con cualquier información de parámetro si es necesario.

Articulos interesantes...