Title: Servicios Web ligeros
1Servicios Web ligeros
- Alternativas al protocoloSOAP para la creación
de servicios distribuidos
Noé Fernández Iglesias
2Introducción
- Popularización de los Servicios Web
- HTTP
- XML
- Protocolo SOAP
3SOAP
- Protocolo de referencia para la creación de SW
- Mensajes XML sobre HTTP
- Fichero de definición WSDL
- UDDI
4SOAP
- Principales críticas al protocolo
- Complejo
- Mensajes XML
- Sobrecarga de red
- WSDL
- Demasiado pesado para pequeños dispositivos
5Alternativas a SOAP
- Caucho Technology
- Hessian
- Burlap
- Spring framework
- HTTP invoker
6Hessian
- Protocolo binario sobre HTTP
- Ligero
- Los servicios son desplegados como servlets
- No necesita fichero de descripción (WSDL, IDL, )
- Usa un mecanismo propio de serialización
- Implementado en varias plataformas
- Java, C, C, PHP, Ruby, Python
7Hessian
- Creación de un servicio con Hessian
- Creación de una interfaz Java a modo de API
pública. - Creación de un cliente del servicio mediante
HessianProxyFactory. - Creación de la clase de implementación del
servicio. - Despliegue y configuración del servicio en un
contenedor de servlets.
8Hessian
- Creación de una interfaz Java a modo de API
pública
public interface HWService public
String helloWorld()
9Hessian
- Creación de un cliente del servicio mediante
HessianProxyFactory
public class BasicClient public static void
main(String args) throws Exception
String url "http//localhost/helloWorld"
HessianProxyFactory factory new
HessianProxyFactory() HWService service
(HWService) factory.create(HWService.class,
url) System.out.println("Hello "
basic.hello())
10Hessian
- Creación de la clase de implementación del
servicio
public class MyService implements HWService
public String hello() return
"Hello, world"
11Hessian
- Despliegue y configuración del servicio en un
contenedor de servlets
ltweb-appgt ltservletgt ltservlet-namegthellolt/serv
let-namegt ltservlet-classgtcom.framework.HessianS
ervletlt/servlet-classgt ltinit-paramgt
ltparam-namegthome-classlt/param-namegt
ltparam-valuegtMyServicelt/param-valuegt
lt/init-paramgt ltinit-paramgt
ltparam-namegthome-apilt/param-namegt
ltparam-valuegtHWServicelt/param-valuegt
lt/init-paramgt lt/servletgt ltservlet-mappinggt
lturl-patterngt/helloWorldlt/url-patterngt
ltservlet-namegthellolt/servlet-namegt
lt/servlet-mappinggt lt/web-appgt
12Burlap
- Versión XML de Hessian
- Mensajes SML sobre HTTP
- Los servicios son desplegados como servlets
- No necesita fichero de descripción (WSDL, IDL, )
- Usa un mecanismo propio de serialización
- Implementado actualmente sólo en Java
13Burlap
- Creación de un servicio con Burlap
- Creación de una interfaz Java a modo de API
pública. - Creación de un cliente del servicio mediante
BurlapProxyFactory. - Creación de la clase de implementación del
servicio. - Despliegue y configuración del servicio en un
contenedor de servlets.
14HTTP invoker
- Solución del framework Spring para el desarrollo
de servicios remotos. - Funciona sobre HTTP
- Utiliza la serialización de Java
- Sencilla implementación y despliegue de servicios
(pasos similares a Hessian y Burlap)
15HTTP invoker
- Creación de un servicio con HTTP invoker
- Creación de una interfaz del servicio e
implementación de la misma. - Exportación del servicio mediante la definición
de un bean de Spring. - Despliegue del servicio en un contenedor de
servlets. - Creación del bean de Spring para el cliente.
16HTTP invoker
- Exportación del servicio mediante la definición
de un bean de Spring
ltbean name"/MyService" class"org.springframew
ork.remoting.httpinvoker.HttpInvokerServiceExporte
r"gt ltproperty name"service"gt
ltref bean"myService"/gt lt/propertygt
ltproperty name"serviceInterface"gt
ltvaluegtcom.httpInvoker.example.MyServicelt/valuegt
lt/propertygt lt/beangt
17HTTP invoker
- Despliegue del servicio en un contenedor de
servlets
ltservletgt ltservlet-namegtmyServiceHttpInvokerlt/
servlet-namegt ltservlet-classgt org.springframe
work.web.servlet.DispatcherServlet
lt/servlet-classgt ltload-on-startupgt3lt/load-on-s
tartupgt lt/servletgt ltservlet-mappinggt
ltservlet-namegtmyServiceHttpInvokerlt/servlet-namegt
lturl-patterngt/remoting/lt/url-patterngt
lt/servlet-mappinggt
18HTTP invoker
- Creación del bean de Spring para el cliente
ltbean id"service" class"org.springframework.re
moting.httpinvoker.HttpInvokerProxyFactoryBean"gt
ltproperty name"serviceUrl"gt
ltvaluegthttp//localhost/remoting/MyServicelt/valuegt
lt/propertygt ltproperty name"serviceInterf
ace"gt ltvaluegtcom.httpInvoker.example.MySer
vicelt/valuegt lt/propertygt ltproperty
name"httpInvokerRequestExecutor"gt ltbean
class "org.springframework.remoting.httpinvoker.C
ommonsHttpInvokerRequestExecutor"/gt
lt/propertygt lt/beangt
19HTTP invoker
MyService service (MyService)context.getBean("se
rvice") service.hello()
20Conclusiones
- Cuándo usar cada protocolo?
- Tenemos control sobre el servicio y el cliente
- Hessian, Burlap, HTTP invoker
- Poco ancho de banda Hessian, Burlap
- Clientes de diversas plataformas
- Hessian
- Aplicaciones complejas, diversos protocolos,
funcionalidad prima sobre la velocidad - SOAP