Arquitectura Orientada a Servicios SOA Definición Es un concepto de arquitectura de software que define la utilización de servicios para dar soporte a ciertos requisitos del negocio. Esta arquitectura permite crear sistemas altamente escalables, que pueden ayudar a las organizaciones a impulsar el rendimiento y, al mismo tiempo, reducir costos de TI y mejorar la flexibilidad en los procesos del negocio. Ventajas • • • • • • • • • • • Reduce el nivel de acoplamiento. Clara definición de roles de desarrollo. Definición de seguridad más clara. Fácil testeo. Mejora la mantención. Favorece la reutilización. Favorece el desarrollo en paralelo. Permite fácil escalabilidad. Permite un mapeo directo entre los procesos y los sistemas. Permite un monitoreo preciso. Permite la interoperabilidad. Desventajas • • • SOA depende de la implementación de estándares. Sin estándares, la comunicación entre aplicaciones requiere de mucho tiempo y código. SOA no es para: aplicaciones con alto nivel de transferencia de datos, aplicaciones que no requieren de implementación del tipo request/response y para aplicaciones que tienen un corto periodo de vida. Incrementalmente se hace difícil y costoso el ser capaz de cumplir con los protocolos y hablar con un servicio. Principios de diseño • • • • • • Contratos estandarizados: los servicios dentro del mismo inventario deben estar acordes a los mismos principios de diseño de contratos. Bajo acoplamiento: de los servicios respecto a su entorno y, a su vez, imponer bajo acoplamiento a sus consumidores. Abstracción: con unos contratos que sólo contienen lo esencial y sin que exista más información que la publicada en los contratos. Reutilización: contenedores de lógica agnóstica que pueda ser fácilmente reutilizada en diferentes contextos. Autonomía: ejerciendo un alto control sobre el entorno de ejecución subyacente. Ausencia de estado • • Capacidad de ser descubiertos: complementados con metadatos que hacen que puedan ser adecuadamente descubiertos e interpretados. Capacidad de ser combinados: formando lógicas más complejas. Estándar Web El estándar que utiliza SOA es WSDL que se vera a continuación. WSDL ¿Qué es wsdl? WSDL es una notación XML para describir un servicio web. Una definición WSDL indica a un cliente cómo componer una solicitud de servicio web y describe la interfaz que proporciona el proveedor del servicio web. Funcionamiento Los pasos que se realizan al consumir el servicio son los siguientes: Lo primero que realiza el cliente al hacer una solicitud al servicio es tomar la definición del archivo WSDL. El servidor entrega el fichero WSDL. Este archivo indica a la petición los métodos y propiedades de ese servicio que están disponibles. El cliente hace la petición en el formato que espera el servidor según las especificaciones del fichero WSDL en el que se dice qué parámetros acepta y de qué tipo. El servidor entrega el resultado de la consulta. Estructura de contenido Elemento WSDL Descripción Un documento WSDL es como cualquier documento XML y se basa en <?xml version=»1.0″> los esquemas, por lo que debe comenzar con dicha etiqueta. Comienzo del documento, este tag agrupa a todos los demás <definitions> elementos Se definen los tipos de datos utilizados en los mensajes. Se utilizan los <types> tipos definidos en la especificación de esquemas XML. Se definen los métodos y parámetros para realizar la operación. Cada message puede consistir en una o más partes (parámetros). Las <message> partes pueden ser de cualquiera de los tipos definidos en la sección anterior. Esta sección es la más importante, ya que definen las operaciones que <portType> pueden ser realizadas, y los mensajes que involucran (por ejemplo, el mensaje de petición y el de respuesta). Se definen el formato del mensaje y detalles del protocolo para cada <binding> portType. En la etiqueta <definitions> podemos tener los siguientes atributos: • xmlnsc – Namespace al que pertenece el WSDL, http://schemas.xmlsoap.org/wsdl/ • name – Podemos tener que el Servicio Web introduzca el nombre del propio servicio en el momento de crear el WSDL. En realidad, se utiliza la etiqueta <service name=»MiServicioWeb»> para indicar el nombre del servicio, depende de la antigüedad del servicio y de la tecnología que se haya utilizado para crearlo. Por tanto, dentro del árbol <service> podemos tener los siguientes atributos e hijos: • • • name – Como hemos dicho antes, éste atributo indica el nombre del Servicio Web. <documentation> – Dentro del arbol del Servicio se puede abrir otra etiqueta para incluir una descripción del servicio. <port> – Aquí se indica la dirección y el tipo de acceso de los Servicios Web. Podría ser: 1. SOAP con <soap:address location=»http://localhost:8082/MiServicio/Servicio1.wsdl» /> 2. HTTP GET con <http:address location=»http://localhost:8082/MiServicio/wsdl/Servicio.jsp» /> Los métodos y parámetros de recepción y entrega de información se envían en elementos con la etiqueta <message>. Los métodos se llaman Mensajes y, normalmente, suele haber al menos, uno de entrada y otro de salida. Los parámetros se expresan de la siguiente forma, <part name=»param1″ type=»xsd:int» /> ó <part name=»param2″ type=»xsd:float» /> y los tipos de datos que podemos utilizar en un WSDL son los mismos que podemos usar en un XSD (Schema XML). También es posible definir clases en el servicio y devolver un parámetro del tipo de esa clase, pero siempre hemos de devolver tipos de datos primarios. Aunque devolvamos clases personalizadas por nosotros, dichas clases devolverán primitivos en sus métodos y propiedades. Para poder indicar si los parámetros son input o output, se utiliza la etiqueta <operation>, dónde se indica el input message y el message de output. La colección de todas las operaciones (métodos) expuestos por un servicio se llama portType y se definen dentro de WSDL con la etiqueta <portType>. Por último, queda el <binding>, que es el enlace que establece la transición desde tipos de datos abstractos a tipos de datos concretos.