Servicios web Jorge Iván Meza Martínez jimezam@gmail.com Especialización en Gestión de Redes de Datos Universidad Nacional de Colombia Sede Manizales 1/71
Contenidos Que es un servicio web. Tecnologías apoyan su implementación. Arquitectura de sus componentes. Tipos principales. REST SOAP Utilidad de los servicios web. Ejemplo de implementación servicio web SOAP en Java utilizando Netbeans JEE. Ejemplo consumir servicio web SOAP desde PHP.2/71
Evaluación pre-contenido 1.Qué es un servicio web? 2.Cuál es la utilidad de los servicios web? 3.Para qué sirven XML y JSON? 4.Qué son RDF, CSV, RSS, ATOM, KML? 5.Puedo desde una tecnología específica (Java por ejemplo) consumir servicios web desarrollados en otra distinta (.NET por ejemplo)? 6.Qué ventajas/desventajas encuentra entre los servicios web y la invocación remota de métodos? 3/71
Qué es un servicio web? a software system designed to support interoperable machine-to-machine interaction over a network. -W3C defintion 4/71
Introducción Proveen una interfaz de servicio conocida para la interacción entre cliente y servidor como lo hace el navegador. Los clientes acceden a servicios remotos (request) y obtienen respuestas (response) codificadas usualmente con XML (o JSON) a través del protocolo HTTP (request-reply). Apoyan la interoperabilidad en un mundo heterogéneo: mashups, grid y cloud computing (middleware). 5/71
Introducción Apoya el desacoplamiento en un sistema distribuido al minimizar las dependencias entre servicios. Se consideran una especialización o extensión de la web. Sin embargo sus servidores no necesariamente deben ser servidores web, ya que estos últimos sólo proveen el servicio HTTP básico. Requiere de un método para la representación de datos y el marshalling de los mensajes XML. 6/71
Introducción El protocolo SOAP determina las para que se empaqueten los mensajes utilizando XML. Generalmente también proveen una descripción de la interfaz del servicio Web Service Description Language (WSDL). También es posible incluír un servicio de directorio para servicios web Universal Description Discovery and Integration (UDDI). 7/71
Introducción XML Security implementa la seguridad en los mensajes: cifrar y firmar. Su implementación puede utilizar middlewares como los siguientes..net Web services (Microsoft) JAX-RPC (Oracle) Apache Axis (Apache) 8/71
Arquitectura general Request SOAP Protocolo HTTP Ops WSDL Red Cliente SOAP Servidor Recursos Response 9/71
Infraestructura y componentes 10/71
Combinación de servicios 11/71
Tipos de servicios web SOAP Simple Object Access Protocol. REST REpresentational State Transfer. (RESTful). 12/71
REST El cliente accede al estado de los recursos remotos mediante URLs y las operaciones o verbos del protocolo HTTP. GET obtener información del estado (idempotente). PUT modificar el estado. DELETE remover el recurso. POST crear el recurso. La identificación de los recursos se realiza a través del URI Nice URLs. 13/71
14/71
15/71
REST No existe un estándar oficial ya que es un estilo de arquitectura y no un protocolo. La representación de los mensajes se puede realizar en diferentes formatos: XML, JSON, RDF, CSV, TXT, RSS, ATOM, KML,... 16/71
17/71
Ejemplo: Twitter POST https://api.twitter.com/1.1/statuses/update.json status=maybe%20he%27ll%20finally%20find %20his%20keys.%20%23peterfalk GET https://api.twitter.com/1.1/statuses/show.json? id=210462857140252672 18/71
Ejemplo: Twitter 200 OK: Success! 304 Not Modified 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 406 Not Acceptable 420 Enhance Your Calm 500 Internal Server Error 502 Bad Gateway 503 Service Unavailable 19/71
Ejemplo Geonames - XML http://api.geonames.porg/countryinfo? lang=es&country=co&username=demo&style=full 20/71
Ejemplo Geonames - XML 21/71
Ejemplo Geonames - JSON http://api.geonames.org/countryinfojson? formatted=true&lang=es&country=co&username =demo&style=full 22/71
Ejemplo Geonames - JSON 23/71
Ventajas de REST Independiente de lenguaje y plataforma. Es mas simple de desarrollar que con SOAP. Baja curva de aprendizaje. Menor dependencia a las herramientas. No necesita una capa de mensajería adicional. Cercano a la filosofía de la web. 24/71
Desventajas de REST Sólo es útil en un modelo de comunciación punto a punto. No en sistemas distribuidos en los cuales se pase por varios intermediarios. Falta de estándares: seguridad, políticas, fiabilidad de los mensajes, etc. Depende del modelo de transporte de HTTP. 25/71
SOAP Es el sucesor de XML-RPC. Depende de XML para empaquetar sus mensajes. Originalmente se basó en HTTP pero puede ser utilizado con otros protocolos como SMTP o JMS. Es extensible módulos. Neutral diferentes protocolos de transporte. Independiente modelo de programación. 26/71
Protocolo XML Sobre (envelope) que hace parte del mensaje y como procesarlo. Reglas de codificación (encoding rules) tipos de datos. Convención para representar las invocaciones remotas y sus respuestas. 27/71
Sobre SOAP 28/71
Request (POST) 29/71
Request (Sobre) 30/71
Response (Sobre) 31/71
32/71
Web Service Definition Language (WSDL) 33/71
WSDL Service funciones publicadas. Endpoint punto de conexión (HTTP URL). Binding formatos de mensaje y representación de datos. Interface operaciones que pueden ser solicitadas y los mensajes requeridos. Operation acciones SOAP y codificación del mensaje. Types descripción de los datos. 34/71
Experimentar Tabla periódica http://www.webservicex.net/periodictable.asmx? wsdl Conversor de moneda http://www.webservicex.net/currencyconvertor. asmx?wsdl Geo IP Service http://www.webservicex.net/geoipservice.asmx? wsdl 35/71
Ventajas de SOAP Independiente de lenguaje, plataforma y transporte. Diseñado para ser utilizado en ambientes distribuidos. Es el estándar de hecho para los servicios web. Tiene buen soporte para otros estándares (WSDL, WS-*), herramientas y proveedores. Provee internamente manejo de errores. Es extensible. 36/71
Desventajas de SOAP Conceptualmente es mas complejo que REST. Su comunicación requiere de mas mensajes (verbose). La curva de aprendizaje es mas empinada. Se tiende a depender mas de herramientas para su desarrollo. 37/71
38/71
Ejemplo implementación servicio web SOAP desde Java Crear el proyecto web Crear el servicio web Agregar operaciones al servicio web Probar su funcionamiento Obtener su WSDL Invocar el servicio web desde un cliente JSP 39/71
Crear el proyecto 40/71
Tipo del proyecto 41/71
Nombre y ubicación 42/71
Servidor de aplicaciones 43/71
Proyecto creado 44/71
Crear un nuevo servicio web 45/71
Nombre para el nuevo servicio web 46/71
Nuevos elementos del proyecto 47/71
Implementación de las operaciones del servicio web 48/71
Operaciones del servicio web en vista de diseño 49/71
Agregar una nueva operación 50/71
Servicio web en vista de diseño 51/71
Implementación de la operación gritar 52/71
Agregar operación directamente 53/71
Probar el servicio web 54/71
JSP de demostración 55/71
Información del servicio web http://localhost:8080/holamundo/miservicio 56/71
WSDL del servicio web http://localhost:8080/holamundo/miservicio?wsdl 57/71
Probador del servicio web http://localhost:8080/holamundo/miservicio?tester 58/71
Invocación de la operación gritar 59/71
Creación del cliente Java 60/71
Información del servicio web para el cliente 61/71
Invocar el servicio web desde el cliente 62/71
Elegir la operación deseada 63/71
Personalizar la invocación de la operación 64/71
El resultado final de la invocación 65/71
66/71
<!doctype html> <html lang="es"> <head> <meta charset="utf 8"> <title>demostración del cliente SOAP de PHP</title> <meta name="author" content="jorge I. Meza"> </head> <body> <?php $client = new SoapClient("http://localhost:8080/HolaMundo/MiServicio?wsdl"); try { $quote = "Be less curious about people and more curious about ideas"; $response1 = $client > gritar(array("mensaje" => $quote)); $response2 = $client > longitud(array("mensaje" => $quote)); $response3 = $client > hello(array("name" => "Marie Curie")); } catch (Exception $e) { echo 'Caught exception: ', $e > getmessage(), "\n"; } echo "It's true: ". $response1 > return. "<br>"; echo "Length: ". $response2 > return. "<br>"; echo "Greeting: ". $response3 > return. "<br>";?> </body> </html> 67/71
El resultado final de la invocación 68/71
69/71
Evaluación post-contenido 1. Qué es un servicio web? 2. Cuál es la utilidad de los servicios web? 3. Para qué sirven XML y JSON? 4. Qué son RDF, CSV, RSS, ATOM, KML? 5. Puedo desde una tecnología específica (Java por ejemplo) consumir servicios web desarrollados en otra distinta (.NET por ejemplo)? 6. Qué ventajas/desventajas encuentra entre los servicios web y la invocación remota de métodos? 70/71
Actividad Se desea desarrollar una calculadora distribuida que permita realizar las siguientes operaciones: suma, resta, multiplicación, división y módulo. Estas operaciones deberán ser realizadas en un servidor remoto y el cliente sólo se deberá encargar de las tareas de presentación de la información. Para esto se deberá implementar un servicio web en Java que provea las operaciones mencionadas y un cliente JSP para verificar su funcionamiento. 71/71