Download Webservices

Document related concepts
no text concepts found
Transcript
Introducción a los
Webservices
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
WSDL
Registro UDDI
WSDL
SOAP
Cliente
SOAP
Servicio Web
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:QNamejavax.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});
Fin