Servicios web SOAP
Un servicio web es un conjunto de métodos y estándares que permite que aplicaciones heterogéneas se comuniquen entre sí a través de Internet, con independencia de la plataforma y del lenguaje de programación. Los servicios web clásicos («big web services») se apoyan en una pila de estándares basados en texto y XML: SOAP para el transporte de mensajes, WSDL para describir la interfaz y UDDI para publicar y localizar servicios. El uso de estándares basados en texto aporta la ventaja de la legibilidad e interoperabilidad, pero supone un inconveniente de rendimiento, ya que obliga a convertir los datos primitivos a texto y a validar y parsear documentos XML.
SOA: arquitectura orientada a servicios
La arquitectura orientada a servicios (SOA) es un modelo orientado a la reutilización de los servicios en entornos de sistemas distribuidos, que permite crear servicios de datos escalables y flexibles. Sus elementos esenciales se articulan en tres funciones o actores:
-
Proveedor de servicios (service provider): publica e implementa el servicio.
-
Agente o registro de servicios (service registry/broker): actúa como directorio para localizar las funcionalidades disponibles en la red.
-
Usuario o consumidor del servicio (service requester): quien lo busca e invoca.
SOAP representa la principal forma de comunicación entre estos tres actores clave de una SOA. Conviene recordar que SOA no se implementa con HTML5, CSS3 y JavaScript (eso corresponde al front-end web, no a la integración de servicios): su propósito es facilitar la integración de servicios empresariales.
El protocolo SOAP
SOAP (Simple Object Access Protocol) es un protocolo estándar, y una recomendación del W3C, que define cómo dos objetos situados en procesos diferentes pueden comunicarse mediante el intercambio de datos XML. Es una especificación para el intercambio de información estructurada en un entorno distribuido y descentralizado, cuyo propósito principal es intercambiar información entre aplicaciones.
Estructura del mensaje SOAP
Un mensaje SOAP se compone de tres partes bien definidas:
| Parte | Obligatoriedad | Contenido |
|---|---|---|
| Envelope (sobre) | Obligatorio | Elemento raíz que envuelve todo el mensaje |
| Header (cabecera) | Opcional | Información de control (seguridad, enrutado, transacciones) |
| Body (cuerpo) | Obligatorio | Datos de la llamada o respuesta; contiene el elemento Fault en caso de error |
El Header es el elemento opcional; si aparece, debe ser el primer hijo del Envelope. El Web Service Listener es el componente que recibe y envía los mensajes en formato SOAP entre el consumidor y el proveedor.
WSDL: descripción del servicio
WSDL (Web Services Description Language) es un lenguaje XML, recomendación del W3C, para describir servicios web: es el estándar básico donde se describen los formatos y requisitos del mensaje necesarios para interactuar con el servicio, especificando su interfaz. WSDL 2.0 permite describir el servicio a partir de un modelo abstracto de lo que ofrece. Sus elementos principales son:
-
<types>: define los tipos de datos (esquema XML) que utiliza el servicio. -
<interface>(WSDL 2.0;portTypeen WSDL 1.1): describe las operaciones abstractas. -
<binding>: define el protocolo y el formato de los datos para cada tipo de puerto. -
<service>: agrupa los puntos de acceso (endpoints).
WSDL no tiene por objetivo definir un alojamiento (hosting) para los servicios web, ni recoge el «enlace lógico con la implementación concreta» como elemento propio de su descripción.
UDDI, WS-I y seguridad
-
UDDI (Universal Description, Discovery and Integration) es un servicio de registro y directorio de servicios web, en XML, donde un proveedor publica su servicio y un consumidor lo busca. Es un estándar de OASIS.
-
WS-I (Web Services Interoperability Organization) es una organización independiente creada para fomentar la interoperabilidad de los servicios web sobre cualquier plataforma, sistema operativo y lenguaje (perfiles Basic Profile).
-
SAML (Security Assertion Markup Language) es un estándar abierto que define un esquema XML para el intercambio de datos de autenticación y autorización; se emplea como elemento de seguridad en los servicios web.
Las organizaciones responsables de la arquitectura y reglamentación de los servicios web son OASIS y W3C. Entre los estándares del W3C se cuentan SOAP y WSDL; el propósito de la arquitectura de servicios web según el W3C es facilitar la comunicación entre el proveedor y el consumidor de servicios.
Implementaciones Java: JAX-RPC, JAX-WS, Axis y CXF
-
JAX-RPC proporciona las API básicas para el desarrollo y despliegue de servicios web en la plataforma Java (Java EE), con el fin de desarrollar servicios web interoperables.
-
JAX-WS es el modelo de programación de próxima generación que complementa a JAX-RPC, ofreciendo mayor independencia de plataforma.
-
Apache Axis es un framework de código abierto basado en XML para desplegar aplicaciones de servicios web; es un motor nuclear de servicios web.
-
Apache CXF es un framework completo de código abierto para servicios web y la librería utilizada para implementar la API Java JAX-WS.
XML, DTD, XML Schema, DOM/SAX y XPath
XML reduce el tiempo de desarrollo al facilitar la representación de datos con una tecnología sencilla y conocida, aunque su rendimiento se ve penalizado por la conversión de datos primitivos a texto y por la validación y el parseo.
-
DTD (Document Type Definition): define la estructura de elementos de un documento XML. Un DTD externo se invoca con
<!DOCTYPE archivoExterno SYSTEM "archivoExterno.dtd">. Sus componentes son Elements, Attributes, Entities, PCDATA y CDATA. -
XML Schema: para un elemento opcional y sin límite de ocurrencias se usa
<xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="unbounded" />. -
DOM vs SAX: DOM lee el documento y construye un árbol en memoria con toda su estructura; SAX es un parser basado en eventos que no construye ese árbol (por eso es falso atribuir a SAX la construcción del árbol en memoria).
-
XPath: lenguaje que permite construir expresiones que recorren y procesan un documento XML (p. ej.
/Usuarios/usuario[numIntentos>3]/apellidos). Sintaxis típica://nombreEtiqueta[@atributo='valor']. Distingue XPath absoluto (ruta directa desde la raíz) y relativo (desde un punto intermedio del DOM). No permite «cambiar la ruta» del elemento. -
XHTML: todos los valores de los atributos deben ir entre comillas, sin excepción para los numéricos.
Fuentes
-
W3C — SOAP Version 1.2 Part 1: Messaging Framework: https://www.w3.org/TR/soap12-part1/
-
W3C — SOAP Version 1.2 Part 0: Primer: https://www.w3.org/TR/soap12-part0/
-
W3C — WSDL Version 2.0 Part 1: Core Language: https://www.w3.org/TR/wsdl20/
-
W3C — WSDL 2.0 Part 0: Primer: https://www.w3.org/TR/2007/REC-wsdl20-primer-20070626/
-
OASIS — UDDI Specification: https://www.oasis-open.org/committees/uddi-spec/
-
OASIS — SAML (Security Services TC): https://www.oasis-open.org/committees/security/
-
OASIS — WS-I Member Section: https://www.oasis-open.org/2017/12/21/oasis-announces-successful-completion-of-web-services-interoperability-ws-i-member-section/
-
W3C — XML 1.0 y XPath: https://www.w3.org/TR/xml/ y https://www.w3.org/TR/xpath-31/
-
W3C — XML Schema: https://www.w3.org/TR/xmlschema11-1/
-
Oracle — SOA and Web Services (JAX-RPC/JAX-WS): https://www.oracle.com/technical-resources/articles/javase/webservices-protocols.html
-
Apache CXF: https://cxf.apache.org/ · Apache Axis: https://axis.apache.org/