Este documento introduce los webservices, incluyendo su definición, los protocolos que los hacen posibles como HTTP, XML, SOAP y WSDL, un ejemplo de implementación de un webservice en Java usando Apache Axis, y cómo desplegar y consumir webservices de forma más elaborada usando archivos WSDD y tipos de datos personalizados.
3. 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
4. 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
6. 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.
7. 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.
8. 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
9. 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í
10. 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
11. 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
12. 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
14. 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)
15. 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
17. 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);
18. 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
19. 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;}
}