Estructura de un mensaje SOAP
SOAP (originalmente las siglas de Simple Object Access Protocol) es un que define de qué forma dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos . Este protocolo deriva de un protocolo creado por en mil novecientos noventa y ocho, llamado . SOAP fue creado por , y otros. Está actualmente bajo el auspicio de la . Es uno de los protocolos usados en los .
SOAP es un paradigma de correo de una dirección sin estado, que puede ser usado para formar protocolos más completos y complejos conforme las necesidades de las aplicaciones que lo incorporan. Puede formar y edificar la capa base de una " de web service", ofertando un framework de mensajería básica en el que los web services se pueden edificar. Este protocolo está basado en XML y se conforma de tres partes:
El protocolo SOAP tiene 3 características principales:
Como ejemplo de cómo el modelo SOAP pueda ser empleado, consideraremos un mensaje SOAP que podría ser mandado a un web service para realizar la busca de algún costo en una base de datos, indicando para ello los factores necesitados en la consulta. El servicio podría regresar un documento en formato XML con el resultado, un ejemplo, precios, localización o bien peculiaridades. Teniendo los datos de respuesta en un formato estandarizado procesable (en inglés "parsable"), éste puede ser integrado directamente en un lugar Web o aplicación externa.
La arquitectura SOAP está formada por múltiples capas de especificación: (Message Exchange Patterns) para el formato del mensaje, links subyacentes del protocolo de transporte, el modelo de procesamiento de mensajes, y la capa de extensibilidad del protocolo. SOAP es el sucesor de , a pesar de que toma el transporte y la neutralidad de la interacción, así como el envelope / header / body, de otros modelos (seguramente de ).
La preocupación por los sistemas distribuidos y de de qué forma diferentes máquinas podían comunicarse entre sí brotó en la década de los noventa. Hasta ese momento, era suficiente con que las aplicaciones de un mismo ordenador pudiesen establecer una comunicación.
En mil novecientos noventa, surgieron los modelos y . El primero, Component Object Model fue creado por Microsoft, y el segundo, CORBA, por el Object Management Group. Sin embargo, estos 2 modelos presentaban una dificultad muy importante: no eran sencillamente interoperables puesto que las 2 máquinas que llevaran a cabo la comunicación debían aguantar COM o bien CORBA, en consecuencia únicamente se podía emplear con 2 máquinas COM o bien dos máquinas CORBA. Más adelante, Microsoft creó DCOM y Sun, (Remote Method Invocation). Aunque estos métodos dejaban establecer una conexión entre ordenadores mediante la red, tampoco eran interoperables puesto que RMI está disponible únicamente para Java, y por ende, es dependiente del lenguaje de programación.
Por todo ello, Microsoft empezó a interesarse por la computación distribuida basada en en el año mil novecientos noventa y siete. Su objetivo era terminar con los inconvenientes de interoperabilidad de las soluciones anteriores y permitir que las aplicaciones se conectasen mediante RPCs (Remote Procedure Calls), utilizando los estándares de comunicación y .
SOAP fue desarrollado como un protocolo de acceso a objetos en 1998 por Dave Winer, Don Box, Bob Atkinson y Mohsen Al-Ghosein por Microsoft, donde Atkinson y Al-Ghosein trabajaban en aquel entonces. La hoy en día es mantenida por el XML Protocol Working Group del .
La versión SOAP once se presentó en el año dos mil e IBM participó en su creación. Esta participación resultó positivísima ya que se produjeron cambios significativos y vitales para su siguiente uso: se diseñó de una manera más modular y escalable, suprimiendo los problemas derivados de una tecnología propietaria, en este caso de Microsoft. Además, IBM llevó a cabo una implementación de SOAP en Java y SOAP se integró en Web Services J2EE.
SOAP originalmente significaba "Simple Object Access Protocol", mas esta inicial se abandonó con la versión 1.2 de la regla. La versión doce se convirtió en una recomendación del el veinticuatro de junio de dos mil tres. El acrónimo se confunde en ocasiones con , siglas de arquitectura orientada a servicios, pero las iniciales no están relacionados.
Después que SOAP se introdujo por primera vez, se transformó en la capa latente de un conjunto más complejo de los web services, basada en la (Web Services Description Language) y (Universal Description Discovery and Integration). Estos servicios, especialmente UDDI, han probado ser de mucho menos interés, pero una consideración de ellos da una comprensión más completa del aguardado rol de SOAP equiparado a como los web services están hoy en día desarrollados.
Un mensaje SOAP es un documento XML ordinario con una estructura definida en la especificación del protocolo. Dicha estructura la conforman las próximas partes:
En los próximos apartados de este documento se va a poder querer esta estructura con ejemplos concretos.
El modelo de procesado de SOAP está definido como un sistema distribuido, en el que intervienen diferentes nodos. En un escenario básico, los nodos SOAP se comunican uno asumiendo el rol de SOAP Sender y otro el de SOAP Receiver. Incluso de esta manera, la especificación define diferentes géneros de nodos en función del rol que aceptan en el envío del mensaje:
Un nodo SOAP puede actuar con uno o bien múltiples roles, cada uno de ellos de los cuales se halla definido mediante una URI conocida como el nombre de rol. Los papeles asumidos por un nodo son invariantes a lo largo del envío de un mensaje, teniendo presente la especificación el procesado individual de mensajes. Tal como se ha comentado, una aplicación puede crear protocolos de comunicación más complejos como capas superiores sobre SOAP, pudiendo delimitar sus propios roles para poder cumplir con sus necesidades.
La especificación de SOAP define unas normas sobre de qué forma han de ser procesados, definiendo una serie de pasos que deben cumplir las implementaciones del protocolo. Estos pasos se pueden hallar en la sección .
Los desarrolladores de aplicaciones actualmente, pueden emplear la infraestructura de mail de Internet para trasmitir mensajes SOAP ya sea como mensajes de correo de texto o como adjuntos. Los ejemplos que se muestran ahora muestran un modo de trasmitir mensajes SOAP, y deben ser tomados como el modo perfecto estándar de hacerlo. Las especificaciones SOAP Versión 1.2 no detallan tal vínculo. Sin embargo, hay una Nota W3C no-normativa [SOAP Correo electrónico Binding] que describe un vínculo de SOAP con el correo electrónico. Su propósito principal es empezar a probar la aplicación de la Infraestructura general de Vínculos con el Protocolo SOAP.
El ejemplo muestra el mensaje de petición de reserva de viaje del Ejemplo 1 transportado como un mensaje de correo entre un agente de usuario remitente y un agente de usuario destinatario. Está implícito que el nodo destinatario tiene capacidad para entender SOAP, por lo que se manda el mensaje de correo electrónico para su procesamiento. (Se asume que asimismo el nodo remitente puede manejar fallos SOAP que pudiese percibir en la contestación o bien correlacionar cualesquiera mensajes SOAP recibidos en contestación a este).
El encabezado del Ejemplo tiene la manera estándar de para mensajes de .
Aunque el correo electrónico es un intercambio de mensajes en un sentido, y no se da ninguna garantía de entrega, infraestructuras como la de la especificación Simple E-mail Transport Protocol () ofrecen un mecanismo de notificación de entrega que, en el caso de SMTP, se denominan Delivery Status Notification (DSN) [Notificación de Estado de Entrega] y Message Disposition Notification (MDN) [Notificación de Disposición de Mensaje]. Estas notificaciones toman la manera de mensajes de e mail enviados a la dirección de e mail especificada en el encabezado del mensaje de correo. Las aplicaciones, así como los usuarios finales del correo, pueden usar estos mecanismos para otorgar el estado de una transmisión de mail, pero estos, si existieran, serían notificaciones al nivel SMTP. El desarrollador de aplicaciones debe entender totalmente las capacidades y limitaciones de estas notificaciones de entrega o el peligro de aceptar que haya existido una entrega del mensaje de forma exitosa cuando podría no haberse producido.
Los mensajes de estado de entrega SMTP son separados del procesamiento del mensaje en la capa SOAP. Las contestaciones SOAP resultantes a los datos SOAP van a ser devueltas por medio de un mensaje de mail nuevo que podría tener o bien no un link con el mensaje de la solicitud original al nivel SMTP. El empleo del encabezado In-reply-to: [En-respuesta-a] según puede conseguir una relación al nivel SMTP, mas no implica necesariamente una relación al nivel SOAP.
Como ejemplo se muestra la manera en que un cliente solicitaría información de un producto a un proveedor de servicios Web:
Y esta sería la respuesta del proveedor:
A pesar de no ser la única opción posible, HTTP fue elegido como protocolo de transporte por sus ventajas, para lidiar con cortafuegos, por ejemplo. Otros protocolos como GIOP/IIOP o bien DCOM (usados en CORBA, RMI y DCOM) suelen ser repelidos por estos cortafuegos.
La forma más habitual de utilizar el protocolo SOAP es mediante el patrón petición-respuesta con remitente SOAP y receptor final SOAP, el que es usado cuando los mensajes SOAP están predefinidos y únicamente se quiere enviar una solicitud y consultar su valor de retorno.
No obstante, muchas veces este patrón no es suficiente, y es preciso establecer un intercambio múltiple de mensajes entre los nodos. La W3C define dos géneros de intercambios de mensajes SOAP para formar una conversación:
En ocasiones, es necesario el empleo de intermediarios en las comunicaciones SOAP, la especificación SOAP doce define dos tipos:
Todos los lenguajes de uso mayoritario en el desarrollo de sistemas web incorporan o bien incluyen algún género de soporte para la implementación tanto de web services SOAP como de los clientes del servicio que los consumen. Aparte de librerías que implementan el protocolo a nivel básico, encontramos otras que incorporan diferentes escenarios de uso y establecen interfaces más fáciles simplificando la programación.
Estas librerías, usadas en conjunto con frameworks de desarrollo de sistemas web agilizan el proceso de desarrollo tanto del web service como de sus clientes, de forma especial si se genera un archivo WSDL que comunique a los clientes del servicio las peculiaridades del servicio.