Introducción a los Webservices

22
Introducción a Introducción a los Webservices los Webservices

description

Introducción a los Webservices. Contenidos. Definición Protocolos que hacen posible la existencia de los Webservices Webservices en Java Ejemplo. Webservices. - PowerPoint PPT Presentation

Transcript of Introducción a los Webservices

Page 1: Introducción a los Webservices

Introducción a Introducción a los Webserviceslos Webservices

Page 2: Introducción a los Webservices

ContenidosContenidos

DefiniciónDefinición Protocolos que hacen posible la Protocolos que hacen posible la

existencia de los Webservicesexistencia de los Webservices Webservices en JavaWebservices en Java EjemploEjemplo

Page 3: Introducción a los Webservices

WebservicesWebservices

Los servicios Web proporcionan una Los servicios Web proporcionan una manera de crear aplicaciones que manera de crear aplicaciones que pueden ser accedidas y utilizadas por pueden ser accedidas y utilizadas por diferentes clientes utilizando diferentes clientes utilizando diferentes plataformas.diferentes plataformas.

Permite invocar funciones de otras Permite invocar funciones de otras aplicaciones independientemente de aplicaciones independientemente de cómo se hayan creado las aplicacionescómo se hayan creado las aplicaciones

Permite integración de aplicacionesPermite integración de aplicaciones

Page 4: Introducción a los Webservices

WebservicesWebservices

Los Servicios Web son para los Los Servicios Web son para los computadores, lo que las páginas computadores, lo que las páginas Web para los humanosWeb para los humanos

Fortaleza de los WebServices – Fortaleza de los WebServices – basados en estándaresbasados en estándares Protocolos de comunicación Formatos de representación de datos Lenguajes descriptivos Mecanismo de descubrimiento

Page 5: Introducción a los Webservices

Protocolos y estándaresProtocolos y estándares

HTTPHTTP XMLXML SOAP, XML-RPCSOAP, XML-RPC WSDLWSDL UDDIUDDI

Page 6: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

HTTPHTTP Un esquema de direccionamiento Un esquema de direccionamiento

comprensible. comprensible. Arquitectura Cliente-Servidor. Arquitectura Cliente-Servidor.

HTTP se asienta en el paradigma HTTP se asienta en el paradigma solicitud/respuesta. La comunicación se solicitud/respuesta. La comunicación se asienta sobre TCP/IP. El puerto por defecto asienta sobre TCP/IP. El puerto por defecto es el 80, pero se pueden utilizar otros. es el 80, pero se pueden utilizar otros.

Page 7: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

HTTPHTTP Es un protocolo sin conexión y sin estado. Es un protocolo sin conexión y sin estado.

Después de que el servidor ha respondido la Después de que el servidor ha respondido la petición del cliente, se rompe la conexión entre petición del cliente, se rompe la conexión entre ambos. ambos.

Está abierto a nuevos tipos de datos. Está abierto a nuevos tipos de datos. Cuando un servidor HTTP transmite Cuando un servidor HTTP transmite

información de vuelta a un cliente, incluye una información de vuelta a un cliente, incluye una cabecera que le indica al cliente sobre los tipos cabecera que le indica al cliente sobre los tipos de datos que componen el documento. de datos que componen el documento.

Page 8: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

XML (XML (eXtended Markup Language) Base de los servicios WebBase de los servicios Web Permite comunicación entre sistemas Permite comunicación entre sistemas

de forma estándarde forma estándar Información con estructuraInformación con estructura Utilizado ampliamente en la industriaUtilizado ampliamente en la industria Futuro estándar de estructuración de Futuro estándar de estructuración de

informacióninformación

Page 9: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

SOAP v/s XML-RPCSOAP v/s XML-RPC Invocación de procedimientos a través de Invocación de procedimientos a través de

protocolos estándarprotocolos estándar XML-RPC . Unix FriendlyXML-RPC . Unix Friendly SOAP . Arquitectura .NETSOAP . Arquitectura .NET Especifican todas las reglas necesarias Especifican todas las reglas necesarias

para ubicar servicios Web XML, para ubicar servicios Web XML, integrarlos en aplicaciones y establecer integrarlos en aplicaciones y establecer la comunicación entre ellos.la comunicación entre ellos.

Incompatibles entre síIncompatibles entre sí

Page 10: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

SOAP v/s XML-RPCSOAP v/s XML-RPC Estandarizados por la W3CEstandarizados por la W3C SOAP lidera en desarrollos de SOAP lidera en desarrollos de

WebservicesWebservices Google posee un servicio Web de Google posee un servicio Web de

búsqueda implementado con protocolo búsqueda implementado con protocolo SOAPSOAP

Page 11: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

SOAPSOAP Protocolo de acceso a objetos simpleProtocolo de acceso a objetos simple soporte completo y minucioso de todo soporte completo y minucioso de todo

tipo de servicios Webtipo de servicios Web Mas potente que XML-RPCMas potente que XML-RPC Incluye toda una arquitectura a su Incluye toda una arquitectura a su

alrededoralrededor

Page 12: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

WSDL y UDDIWSDL y UDDI El archivo WSDL, en formato XML, indica al El archivo WSDL, en formato XML, indica al

sistema que consulte, qué servicios disponesistema que consulte, qué servicios dispone WSDL además da una referencia precisa WSDL además da una referencia precisa

sobre el servicio, para poder invocarlo sobre el servicio, para poder invocarlo usando los parámetros adecuadosusando los parámetros adecuados

UDDI es un Servicio Web en línea que se UDDI es un Servicio Web en línea que se puede utilizar desde las aplicaciones para puede utilizar desde las aplicaciones para descubrir de forma dinámica otros servicios descubrir de forma dinámica otros servicios en líneaen línea

Page 13: Introducción a los Webservices

Protocolos y EstándaresProtocolos y Estándares

WSDL y UDDIWSDL y UDDI

Cliente Servicio Web

SOAP

SOAP

Registro UDDIWSDL WSDL

Page 14: Introducción a los Webservices

Webservices en JavaWebservices en Java

Apache Axis – Implementación de Apache Axis – Implementación de SOAP para Java y C++SOAP para Java y C++

Continuación del proyecto Apache Continuación del proyecto Apache SOAPSOAP

Deploy de servicios en forma naturalDeploy de servicios en forma natural Requiere un WebServer para operar Requiere un WebServer para operar

(Apache Tomcat)(Apache Tomcat)

Page 15: Introducción a los Webservices

Ejemplo deploy simpleEjemplo deploy simple

Cálculo raíz cuadradaCálculo raíz cuadradapublic class Raiz public class Raiz

{{

public double raizCuadrada(String i1)public double raizCuadrada(String i1)

{{

return Math.sqrt(Integer.parseInt(i1));return Math.sqrt(Integer.parseInt(i1));

} }

}}

Guardamos clase con extensión .jws Guardamos clase con extensión .jws en directorio de Axisen directorio de Axis

Page 16: Introducción a los Webservices

Ejemplo deploy simpleEjemplo deploy simple XML SOAP generadoXML SOAP generado

<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope <soapenv:Envelope

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soapenv:Body><soapenv:Body> <raizCuadradaResponse <raizCuadradaResponse

soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/esoapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/>ncoding/>

<raizCuadradaReturn <raizCuadradaReturn xsi:type="xsd:double">2.0</raizCuadradaReturn>xsi:type="xsd:double">2.0</raizCuadradaReturn>

</raizCuadradaResponse></raizCuadradaResponse> </soapenv:Body></soapenv:Body></soapenv:Envelope></soapenv:Envelope>

Page 17: Introducción a los Webservices

Ejemplo deploy simpleEjemplo deploy simple

Cliente que utiliza este WebserviceCliente que utiliza este Webservice

String numero ="465";String numero ="465";

Service service = Service service = newnew Service(); Service();

Call call = (Call)service.createCall();Call call = (Call)service.createCall();

call.setTargetEndpointAddress(call.setTargetEndpointAddress(new new URL("http://localhost:8080/axis/Raiz.jws"));URL("http://localhost:8080/axis/Raiz.jws"));

call.setOperationName(call.setOperationName(newnew QName("http://soapinterop.org/", QName("http://soapinterop.org/", "RaizCuadrada"));"RaizCuadrada"));

Double returnValue = (Double)call.invoke(Double returnValue = (Double)call.invoke(newnew Object[]{numero}); Object[]{numero});

System.out.println("La raiz de "+numero +" es "+returnValue);System.out.println("La raiz de "+numero +" es "+returnValue);

Page 18: Introducción a los Webservices

Ejemplo deploy simpleEjemplo deploy simple Tipos de datos estandarizadosTipos de datos estandarizados

xsd:base64Binaryxsd:base64Binary byte[]byte[] xsd:booleanxsd:boolean booleanboolean xsd:bytexsd:byte bytebyte xsd:dateTimexsd:dateTime java.util.Calendarjava.util.Calendar xsd:decimalxsd:decimal java.math.BigDecimaljava.math.BigDecimal xsd:doublexsd:double doubledouble xsd:floatxsd:float floatfloat xsd:hexBinaryxsd:hexBinary byte[]byte[] xsd:intxsd:int intint xsd:integerxsd:integer java.math.BigIntegerjava.math.BigInteger xsd:longxsd:long longlong xsd:shortxsd:short shortshort xsd:stringxsd:string java.lang.Stringjava.lang.String xsd:QNamexsd:QName javax.xml.namespace.QNamejavax.xml.namespace.QName

Page 19: Introducción a los Webservices

Deploy más elaboradoDeploy más elaborado Ejemplo: Webservice que retorna una clase creada por nosotrosEjemplo: Webservice que retorna una clase creada por nosotros

public class Archivo implements Serializable public class Archivo implements Serializable {{

public String Nombre;public String Nombre;public byte[] Datos;public byte[] Datos;public Archivo(){}public Archivo(){}

public void setNombre(String param_Nombre){public void setNombre(String param_Nombre){Nombre = param_Nombre;}Nombre = param_Nombre;}

public void setDatos(byte[] param_Datos){public void setDatos(byte[] param_Datos){Datos = param_Datos;}Datos = param_Datos;}

public byte[] getDatos()public byte[] getDatos() {{return Datos;return Datos; }}

public String getNombre(){public String getNombre(){return Nombre;}return Nombre;}

}}

Page 20: Introducción a los Webservices

Deploy más elaboradoDeploy más elaborado Archivo WSDDArchivo WSDD

<deployment xmlns="http://xml.apache.org/axis/wsdd/" <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="EventosServidor" provider="java:RPC"><service name="EventosServidor" provider="java:RPC"> <parameter name="className" <parameter name="className"

value="WS_EventosServidor"/>value="WS_EventosServidor"/> <parameter name="allowedMethods" value="*"/><parameter name="allowedMethods" value="*"/>

<beanMapping qname="myNS:Archivo" <beanMapping qname="myNS:Archivo" xmlns:myNS="urn:BeanService"xmlns:myNS="urn:BeanService"

languageSpecificType="java:Archivo"/>languageSpecificType="java:Archivo"/> </service></service></deployment></deployment>

Page 21: Introducción a los Webservices

Deploy más elaboradoDeploy más elaborado ClienteCliente

Service service = Service service = newnew Service(); Service();Call call = (Call)service.createCall();Call call = (Call)service.createCall();QName archivoqn = QName archivoqn = newnew QName("urn:BeanService","Archivo"); QName("urn:BeanService","Archivo");call.setOperationName( "descargaEventos" );call.setOperationName( "descargaEventos" );call.registerTypeMapping(Archivo.call.registerTypeMapping(Archivo.classclass,archivoqn,,archivoqn,newnew

BeanSerializerFactory(Archivo.BeanSerializerFactory(Archivo.classclass,archivoqn),,archivoqn),newnew BeanDeserializerFactory(Archivo.BeanDeserializerFactory(Archivo.classclass,archivoqn),,archivoqn),falsefalse); );

call.registerTypeMapping(Archivo.call.registerTypeMapping(Archivo.classclass,archivoqn,,archivoqn,newnew BeanSerializerFactory(Archivo.BeanSerializerFactory(Archivo.classclass,archivoqn),,archivoqn),newnew BeanDeserializerFactory(Archivo.BeanDeserializerFactory(Archivo.classclass,archivoqn));,archivoqn));

call.setTargetEndpointAddress(call.setTargetEndpointAddress(newnew URL("http://localhost:8080/axis/services/EventosServidor"));URL("http://localhost:8080/axis/services/EventosServidor"));

Archivo[] returnValue = (Archivo[])call.invoke(Archivo[] returnValue = (Archivo[])call.invoke(newnew Object[] Object[]{Fecha,Hora});{Fecha,Hora});

Page 22: Introducción a los Webservices

FinFin