250 likes | 444 Views
Introducción a los Webservices. Contenidos. Definición Protocolos que hacen posible la existencia de los Webservices Webservices en Java Ejemplo. Webservices.
E N D
Contenidos • Definición • Protocolos que hacen posible la existencia de los Webservices • Webservices en Java • Ejemplo
Webservices • Los servicios Web proporcionan una manera de crear aplicaciones que pueden ser accedidas y utilizadas por diferentes clientes utilizando diferentes plataformas. • Permite invocar funciones de otras aplicaciones independientemente de cómo se hayan creado las aplicaciones • Permite integración de aplicaciones
Webservices • Los Servicios Web son para los computadores, lo que las páginas Web para los humanos • Fortaleza de los WebServices – basados en estándares • Protocolos de comunicación • Formatos de representación de datos • Lenguajes descriptivos • Mecanismo de descubrimiento
Protocolos y estándares • HTTP • XML • SOAP, XML-RPC • WSDL • UDDI
Protocolos y Estándares • HTTP • Un esquema de direccionamiento comprensible. • Arquitectura Cliente-Servidor. • HTTP se asienta en el paradigma solicitud/respuesta. La comunicación se asienta sobre TCP/IP. El puerto por defecto es el 80, pero se pueden utilizar otros.
Protocolos y Estándares • HTTP • Es un protocolo sin conexión y sin estado. • Después de que el servidor ha respondido la petición del cliente, se rompe la conexión entre ambos. • Está abierto a nuevos tipos de datos. • Cuando un servidor HTTP transmite información de vuelta a un cliente, incluye una cabecera que le indica al cliente sobre los tipos de datos que componen el documento.
Protocolos y Estándares • XML (eXtended Markup Language) • Base de los servicios Web • Permite comunicación entre sistemas de forma estándar • Información con estructura • Utilizado ampliamente en la industria • Futuro estándar de estructuración de información
Protocolos y Estándares • SOAP v/s XML-RPC • Invocación de procedimientos a través de protocolos estándar • XML-RPC . Unix Friendly • SOAP . Arquitectura .NET • Especifican todas las reglas necesarias para ubicar servicios Web XML, integrarlos en aplicaciones y establecer la comunicación entre ellos. • Incompatibles entre sí
Protocolos y Estándares • SOAP v/s XML-RPC • Estandarizados por la W3C • SOAP lidera en desarrollos de Webservices • Google posee un servicio Web de búsqueda implementado con protocolo SOAP
Protocolos y Estándares • SOAP • Protocolo de acceso a objetos simple • soporte completo y minucioso de todo tipo de servicios Web • Mas potente que XML-RPC • Incluye toda una arquitectura a su alrededor
Protocolos y Estándares • WSDL y UDDI • El archivo WSDL, en formato XML, indica al sistema que consulte, qué servicios dispone • WSDL además da una referencia precisa sobre el servicio, para poder invocarlo usando los parámetros adecuados • UDDI es un Servicio Web en línea que se puede utilizar desde las aplicaciones para descubrir de forma dinámica otros servicios en línea
Protocolos y Estándares • WSDL y UDDI Registro UDDI WSDL WSDL SOAP Cliente Servicio Web SOAP
Webservices en Java • Apache Axis – Implementación de SOAP para Java y C++ • Continuación del proyecto Apache SOAP • Deploy de servicios en forma natural • Requiere un WebServer para operar (Apache Tomcat)
Ejemplo deploy simple • Cálculo raíz cuadrada public class Raiz { public double raizCuadrada(String i1) { return Math.sqrt(Integer.parseInt(i1)); } } • Guardamos clase con extensión .jws en directorio de Axis
Ejemplo deploy simple • XML SOAP generado <?xml version="1.0" encoding="UTF-8"?> <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> <raizCuadradaResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/> <raizCuadradaReturn xsi:type="xsd:double">2.0</raizCuadradaReturn> </raizCuadradaResponse> </soapenv:Body> </soapenv:Envelope>
Ejemplo deploy simple • Cliente que utiliza este Webservice String numero ="465"; Service service = new Service(); Call call = (Call)service.createCall(); call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/Raiz.jws")); call.setOperationName(new QName("http://soapinterop.org/", "RaizCuadrada")); Double returnValue = (Double)call.invoke(new Object[]{numero}); System.out.println("La raiz de "+numero +" es "+returnValue);
Ejemplo deploy simple • Tipos de datos estandarizados • xsd:base64Binary byte[] • xsd:boolean boolean • xsd:byte byte • xsd:dateTime java.util.Calendar • xsd:decimal java.math.BigDecimal • xsd:double double • xsd:float float • xsd:hexBinary byte[] • xsd:int int • xsd:integer java.math.BigInteger • xsd:long long • xsd:short short • xsd:string java.lang.String • xsd:QName javax.xml.namespace.QName
Deploy más elaborado • Ejemplo: Webservice que retorna una clase creada por nosotros public class Archivo implements Serializable { public String Nombre; public byte[] Datos; public Archivo(){} public void setNombre(String param_Nombre){ Nombre = param_Nombre;} public void setDatos(byte[] param_Datos){ Datos = param_Datos;} public byte[] getDatos() { return Datos; } public String getNombre(){ return Nombre;} }
Deploy más elaborado • Archivo WSDD <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="EventosServidor" provider="java:RPC"> <parameter name="className" value="WS_EventosServidor"/> <parameter name="allowedMethods" value="*"/> <beanMapping qname="myNS:Archivo" xmlns:myNS="urn:BeanService" languageSpecificType="java:Archivo"/> </service> </deployment>
Deploy más elaborado • Cliente Service service = new Service(); Call call = (Call)service.createCall(); QName archivoqn = new QName("urn:BeanService","Archivo"); call.setOperationName( "descargaEventos" ); call.registerTypeMapping(Archivo.class,archivoqn,new BeanSerializerFactory(Archivo.class,archivoqn),new BeanDeserializerFactory(Archivo.class,archivoqn),false); call.registerTypeMapping(Archivo.class,archivoqn,new BeanSerializerFactory(Archivo.class,archivoqn),new BeanDeserializerFactory(Archivo.class,archivoqn)); call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/EventosServidor")); Archivo[] returnValue = (Archivo[])call.invoke(new Object[]{Fecha,Hora});