Download Introducción a Web Services
Document related concepts
no text concepts found
Transcript
3er Congreso Interamericano de Administración Universitaria Visión de Web Services con J2EE Héctor Jiménez Arquitectura e Integración de aplicaciones Dirección de Tecnología QoS Labs Agenda • Introducción a Web Services • Web Services: que son, estándares e implementaciones • Desarrollo de Web Services en Java • Arquitectura de Web Services en J2EE – JAX-RPC • Ejemplos de implementación de servicio con JAXRPC • Modelos de programación para clientes de Web Services • Web Services y Seguridad • Estándares e implementaciones en J2EE • Ejemplos Agenda • Integración e Interoperabilidad J2EE usando Web Services • Procesos de negocio en Web Services (BPEL) • WS-I • Consideraciones generales • Ejemplo de Web Services en Sector Financiero • Trayectoria de Web Services • Adopción de tecnología de Web Services actual: simple, EAI y B2B • Colaboración en negocio: ebXML, EDI, RosettaNet, BizTalk Comenzamos • Introducción a Web Services • Desarrollo de Web Services en Java • Web Services y Seguridad • Integración e Interoperabilidad J2EE usando Web Services • Trayectoria de Web Services Introducción a Web Services • Qué es un Web Service: Infraestructura independiente de lenguaje y plataforma para comunicación aplicación – aplicación desacoplada e interoperable sobre una Internet • Independiente de lenguaje y plataforma: Separación de la especificación y la implementación • Desacoplada: Basa en mensajes con interacción síncrona y asíncrona • Sobre una Internet: No existe control centralizado, se usan protocolos bien establecidos y consideraciones de seguridad • Interoperable: Basado en estándares • Aplicación – Aplicación: Internet tradicional es Aplicación – Humano (SMTP, FTP, HTTP); esquemas RPC (procedural), ORB y COM (objetos), MOM (mensajes – jms/mq) para aplicación – aplicación dentro de una Internet sin considerar interoperar con otros sistemas Introducción a Web Services • Comunicación entre Aplicaciones en Web Services • Protocolo de Transporte: • HTTP/HTTPS • Codificación de datos • Protocolo SOAP (Simple Object Access Protocol) y Esquema XML (DTD/XSD) • Descripción de interfaces o puntos de acceso a aplicación • WSDL (Web Services Description Language) • Descripción de servicio y descubrimiento • UDDI (Universal Description, Discovery and Integration) • Seguridad • WS-Security, XML Signature y XML Encription (Especificaciones JSR) Introducción a Web Services • Protocolo SOAP • Protocolo basado en XML para intercambio de información Mensaje SOAP Parte principal (text/xml) “Sobre” SOAP (Envelope) Encabezado (Header) Enrutamiento Seguridad Attachment . .. Attachment Cuerpo (Body) Contenido Introducción a Web Services • Protocolo SOAP POST /axis/services/MessageService HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.2RC1 Host: localhost:5050 Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Content-Length: 409 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:e1 xmlns:ns1="urn:foo">Hola</ns1:e1> <ns2:e1 xmlns:ns2="urn:foo">Mundo</ns2:e1> <ns3:e3 xmlns:ns3="urn:foo">Datos adicionales</ns3:e3> </soapenv:Body> </soapenv:Envelope> Introducción a Web Services • Definición de Web Services: WSDL • Propuesta de IBM y Microsoft <definitions> Define el servicio llamado ServicioSumaNumeros y los nombres de espacio para el documento XML (targetNamespace) <message> Define 2 mensajes: Solicitud y Respuesta c/u con 1 parámetro (part) de tipo String que está definido según el estándar de XML Schema con el namespace xsd referenciado en <definitions> <portType> <binding> Define una operación llamada suma que se compone de un mensaje de entrada (param) y otro de salida (valor) identificado con el namespace xsd1. Los patrones de operaciones son: input, input y output, output e input y output (notificación) que pueden incluir un fault Especifica cómo el puerto se va a transmitir (HTTP GET, HTTP POST o SOAP) y el estilo o formado el mensaje: RPC o Document. Especifica la ubicación del servicio y una descripción <service> Introducción a Web Services • Ejemplo de definición de servicio en WSDL: Servicio de Suma de Números Introducción a Web Services • Formas de serialización de datos • Se usan definiciones de XML Schema (Literal) para determinar cómo codificar los datos • Se usa reglas de codificación de SOAP (Encoding) • Resultado de 4 combinaciones: Document/Literal, RPC/Encoding, Document/Encoding, RPC/Literal • SOAP Document/Literal encoding más aceptado y usado, recomendado por Web Services Interop (WS-I) Basic Profile. • Usar RPC cuando: dentro de misma empresa (ambiente confiado), se requiere confiabilidad, se tiene suficiente ancho de banda, proceso de negocio corto, comunicación síncrona y punto a punto (en vez de “endto-end”). Introducción a Web Services • Formas de interpretación de documentos SOAP • RPC (Remote Procedure Call): cada atributo part del WSDL de la operación indica un parámetro o un valor de respuesta que se encuentra dentro del cuerpo del mensaje de SOAP <binding name="SumaNumerosBinding" type="tns:SumaNumerosPort"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="Suma"> <input> <soap:body use="encoded" namespace=http://www.qoslabs.com” encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace=http://www.qoslabs.com” encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> <fault name="error"> <soap:fault name="error" use="literal"/> </fault> </operation> </binding> Introducción a Web Services • Formas de interpretación de documentos SOAP • Document: El mensaje es directamente el body de SOAP <binding name="SumaNumerosBinding" type="tns:SumaNumerosPort"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="Suma"> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> <fault name="error"> <soap:fault name="error" use="literal"/> </fault> </operation> </binding> Introducción a Web Services • Esquemas XML • Sistema o lenguaje de definición de tipos de datos para XML. Tradicionalmente definido en DTD / XML Infoset (abstracto), evolución a espacios de nombres (Namespaces) con XML 1.0 <?xml version="1.0" encoding="UTF-16" ?> <ns:estudiante xmlns:ns="xyzzy:abc"> <nombre>David</nombre> <edad>21</edad> </ns:estudiante> • XML Schema Definition Languaje (XSD) permite asociar tipos de datos con elementos y atributos <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="xyzzy:abc" targetNamespace="xyzzy:abc"> <xsd:complexType name="persona" > <xsd:sequence><xsd:element name="nombre" type="xsd:string"/> <xsd:element name="edad" type="xsd:double" /> </xsd:sequence> </xsd:complexType> <xsd:element name="estudiante" type="tns:persona" /> </xsd:schema> Introducción a Web Services • Esquemas XML • Mapeo entre un esquema XML y la programación del sistema no es fácil • Estructuras de datos no soportadas en esquema XML (arreglos, referencias, etc) Sistema Clase Java Clase Java Cuerpo (Body) Esquema ComplexType ComplexType Donde vamos? • Introducción a Web Services • Desarrollo de Web Services en Java • Web Services y Seguridad • Integración e Interoperabilidad J2EE usando Web Services • Trayectoria de Web Services Desarrollo de Web Services en Java • Arquitectura de Web Services en J2EE: JAXRPC • Basada en JAXRPC 1.1 (Java API for XML-Based RPC) y JSR 101. Especificación para la construcción de aplicaciones y servicios Web que incorpora funcionalidad RPC basada en XML de acuerdo al estándar SOAP 1.1. Versión 2.0 de especificación JAXRPC en proceso de revisión por Java Community Process (Junio 2004) • Conjunto de puertos que operan sobre mensajes, los puertos operan dentro de un contenedor J2EE. Implementación JAX-RPC 1.1 especifica uso de Servlet para acceso a puerto de servicio, JSR 109 emplea EJB 2.1. • Implementación incluída en JWSDP 1.4 (Java Web Services Developer Pack) • Herramientas: • WSDL desde/hacia Java • Serialización de tipos de Java desde/hacia XML • Empaquetamiento para aplicaciones web J2EE • Modelos de programación de clientes Desarrollo de Web Services en Java • Arquitectura de Web Services en J2EE: JAXRPC Puerto Servicio JAXRPC Documento WSDL Cliente JAXRPC Java < WSDL WSDL > Java Código Generado wscompile wsdeploy Runtime JAXRPC (Stub) Contenedor Runtime JAXRPC (Tie) SOAP HTTP Desarrollo de Web Services en Java • Mapeo WSDL < > Java en JAXRPC <portType name="Servicio"> <operation name="Operacion"> <input message="tns:Consulta"/> <output message="tns:Respuesta"/> </operation> </portType> portType = Interfaz Abstracta en Java operation = Metodo de clase message = parámetros y valores de regreso según codificación public interface Servicio extends java.rmi.Remote { public String Operacion(String param) throws java.rmi.RemoteException; } Desarrollo de Web Services en Java • A partir de definición WSDL ó a partir de clases java • Uso de herramientas (IDE, Ant) • Pasos generales para generación de Web Service • wsdl2java – Generación de clases de tipos y operaciones wscompile.sh -import -d ./classes -keep -s ./src -f:serializeinterfaces,wsi -verbose -model ./ ServicioSumaNumeros_model.xml.gz ./config.xml •Modificar código generado (implementación de lógica de web service) - recompilar •Generar clases de servicio wscompile.sh -gen:server -classpath ./classes -d ./classes -keep -s ./src -verbose config.xml •Crear estructura de aplicación web (WAR) •Instalación de aplicación web en servlet container Desarrollo de Web Services en Java • Ejemplo de implementación de servicio (Suma Numeros) Desarrollo de Web Services en Java • Modelos de programación para clientes de Web Services • Stub • Se genera(n) clase(s) al compilar y están ligadas a transporte del XML (HTTP o SOAP) • Se implementa javax.xml.rpc.Stub • Se utilizan clases particulares de API de implementación (JAXRPC, AXIS) • Mejor rendimiento, método menos dinámico • Ejemplo de cliente Stub Desarrollo de Web Services en Java • Modelos de programación para clientes de Web Services • Dynamic Proxy: Interfaz WSDL creada al momento de compilación pero la implementación de proxy en cliente se hace en “runtime” • Se genera “al vuelo” durante ejecución de cliente, no al compilar • El servicio proporciona la definición (WSDL) que el proxy acuerda durante ejecución • Más fácil de programar pero mas lento que Stub • Ejemplo de cliente Proxy Desarrollo de Web Services en Java • Modelos de programación para clientes de Web Services • Dynamic Invocation Interface (DII): Tanto el WSDL como la implementación misma del cliente se hace en “runtime” • Control completo al programador del cliente • Método más dinámico pero mayor complejidad en programación • Cliente encuentra servicio e invoca vía Broker • Usar cuando no se conoce la definición hasta ejecución (no al compilar) • Ejemplo de cliente DII Donde vamos? • Introducción a Web Services • Desarrollo de Web Services en Java • Web Services y Seguridad • Integración e Interoperabilidad J2EE usando Web Services • Trayectoria de Web Services Web Services y Seguridad • Seguridad en Web Services: Panorama general de estándares • W3C (World Wide Web Consortium) • XML Encription, XML Signature, SOAP • IETF (Internet Engineering Task Force) • SSL, TLS, HTTP sobre SSL/TLS, HTTPS • OASIS (Organization for the Advancement of Structured Information Standards) • Web Services Security (WSS), SOAP message level security, SAML Web Services y Seguridad • Seguridad en Web Services: Panorama general de estándares Draft Inicial Estabilidad Draft Maduro V1 Completa Web Services y Seguridad • Seguridad en Web Services: Implementación en J2EE • JAXRPC utiliza XWS-Security APIs para seguridad en Web Services bajo los siguientes estándares: • XML-DSig (Apache/W3C) para firmas digitales • XML-Enc (Apache/W3C) para encripción de mensajes • Tokens de usuario y certificados X.509 para autenticación basados en OASIS WSS Username Token Profile 1.0 y OASIS WSS X509 Certificate Token Profile 1.0 • JSR 105 es estándar para firmas digitales y JSR 106 es estándar para encripción, no usados por JAXRPC (versiones futuras) • Base de datos certificados basada en JKS (Java Key Store) Web Services y Seguridad • Capas de seguridad • Nivel Transporte: Autentificación básica, autentificación por certificado sobre SSL/TLS. Codificación de usuario/contraseña en stub de cliente, puerto de servicio en HTTPS con J2EE security constraints. • Nivel Mensaje: Información de seguridad dentro de mensaje SOAP (encabezado) por ejemplo: la firma de contenido, certificado x.509 de remitente. Problemas con administración de infraestructura PKI en B2B • Formatos de mensaje en desarrollo por OASIS por lo cual es EA en XWS-Security de JWSDP • JAXRPC utiliza Handlers: puntos de intercepción en el procesamiento del mensaje entre cliente y servicio Web Services y Seguridad • Ejemplo de implementación de WSS (Pago Electronico): • Encripción de mensajes SOAP • Autentificación vía certificados X.509 Cliente Msg Firmado = SpK1(M),PK1 Server (Tomcat) Msg Encriptado = EPK2(M) JKS contiene: a)pK1 y PK1 de cliente b)PK2 de server JKS contiene: a)pK2 y PK2 de server b)PK1 de cliente Hash de msg a partir de pK1 y envío de PK1 (para verific por parte de server) Desencripción usando pK2 Encripción de msgusando PK2 p = Llave privada P = Llave pública Donde vamos? • Introducción a Web Services • Desarrollo de Web Services en Java • Web Services y Seguridad • Integración e Interoperabilidad J2EE usando Web Services • Trayectoria de Web Services Integración e Interoperabilidad • Procesos de negocio con Web Services • Especificación de Business Process Execution Languaje (BPEL) for Web Services 1.1 por IBM • BPEL es un lenguaje en XML para describir el comportamiento de un proceso de negocio basado en Web Services • Acceso a ciertos procesos de negocio para otras empresas de manera estándar: proveedores, distribuidores, cadena de aprovisionamiento • Ejemplo de implementación ActiveBPEL Integración e Interoperabilidad • WS-I • Esfuerzo para proveer interoperabilidad para Web Services entre aplicaciones, lenguajes de programación y plataformas: Microsoft, IBM, Sun • No genera especificaciones o estándares, más bien genera perfiles, marcos de referencias para pruebas de interoperabilidad (conformance) • J2EE 1.4 provee compatibilidad para Web Services según WS-I para: WSDL, SOAP y WSS. Implementado en JWSDP • Provee escenarios de compatibilidad, herramientas para el análisis de configuraciones (WSDl/UDDI) así como para monitoreo de mensajes Integración e Interoperabilidad • Consideraciones generales de integración para Web Services • Abuso de Web Services en sistemas (sobrecarga adicional) • Limitaciones en el uso de tipos de estructuras de datos cuando se utilizan diferentes implementaciones (.NET, Java) • Implementaciones de estándares de Web Services carecen de WSS • Federación de identidad no madura entre implementaciones, requiere de infraestructura de identidad • Mecanismo adecuado para Service Oriented Architectures (SOA), principalmente como enlace entre los procesos de negocio de empresas Web Services Sector Financiero • Web Service para Sector Financiero • Arquitectura SOA • Estandarización de estructura de transacciones: IFX • Seguridad en transacciones • Crecimiento hacia exterior/interior con procesos de negocio • Ejemplos de implementación Web Services Sector Financiero WF App Mainframe Msg App J2EE Web App WS Orq WSS BD LDAP IDs Sincronización Auditoría Rep1 Rep2 Identidad Rep3 Rep4 Consumidores Donde vamos? • Introducción a Web Services • Desarrollo de Web Services en Java • Web Services y Seguridad • Integración e Interoperabilidad J2EE usando Web Services • Trayectoria de Web Services Trayectoria Web Services • Adopción de tecnología de Web Services actual • Actualmente se implementan (México) muy pocos Web Services y son simples, orientados a consumidores, sin estado • Principalmente en EUA se ha iniciado la implementación de Web Services estilo EAI (Enterprise Application Integration), con frontera la misma organización • A corto plazo: B2B, implementando Web Services para extranet con el fin de habilitar integración con los procesos de negocio de la empresa hacia socios, clientes y otros Trayectoria Web Services • Colaboración de negocio: ebXML, EDI, RosettaNet y BizTalk • Limitantes en WSDL, SOAP y UDDI: no resuelven colaboración de negocio, no hay repositorio de objetos de negocio • EDI muy “pesado”, requiere de VPN y “personalización” para cada negocio • RosettaNet provee definiciones muy rígidas y no ofrece descubrimiento • BizTalk es propietario, una sola plataforma y no existe concepto de colaboración de negocio o perfil de socios • ebXML: crear una comunidad de comercio electrónica donde empresas de cualquier tamaño puedan localizarse y llevar a cabo negocio a través del intercambio de mensajes XML • Especificaciones para Procesos de negocio, modelo de registro y servicios, mensajería y colaboración entre socios • JAXR provee API para registros basados en ebXML Trayectoria Web Services • Colaboración de negocio: ebXML Trayectoria Web Services • Colaboración de negocio: ebXML Web Services + ebXML Tipo Request/Response Colaboración Comunicación RPC/Document Síncrona/Asíncrona Descr. Servicio WSDL CPP, CPA (WSDL dentro de CPP/CPA) Protocolo SOAP, XML ebXML Message Service sobre SOAP, XML o BPSS Estándar de contenido Ninguno EDIFACT, OAGI, BODs, UBL, etc Localización UDDI Registry ebXML Registry Trayectoria Web Services • Rendimiento: Fast Web Service Protocolo vs. Tiempo 20 elementos Preguntas