Servicios Web ligeros
Alternativas al protocolo
SOAP para la creación de
servicios distribuidos
Noé Fernández Iglesias
Introducción
Popularización de los Servicios Web


HTTP
XML
Protocolo SOAP
SOAP
Protocolo de referencia para la creación
de SW

Mensajes XML sobre HTTP

Fichero de definición WSDL

UDDI
SOAP
Principales críticas al protocolo

Complejo

Mensajes XML
Sobrecarga de red

WSDL

Demasiado pesado para pequeños dispositivos
Alternativas a SOAP
Caucho Technology


Hessian
Burlap
Spring framework

HTTP invoker
Hessian
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
Hessian
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.
Hessian
Creación de una interfaz Java a modo de
API pública
public interface HWService {
public String helloWorld();
}
Hessian
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());
}
}
Hessian
Creación de la clase de implementación
del servicio
public class MyService implements HWService {
public String hello() {
return "Hello, world";
}
}
Hessian
Despliegue y configuración del servicio en
un contenedor de servlets
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.framework.HessianServlet</servlet-class>
<init-param>
<param-name>home-class</param-name>
<param-value>MyService</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>HWService</param-value>
</init-param>
</servlet>
<servlet-mapping>
<url-pattern>/helloWorld</url-pattern>
<servlet-name>hello</servlet-name>
</servlet-mapping>
</web-app>
Burlap
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
Burlap
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.
HTTP 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)
HTTP 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.
HTTP invoker
Exportación del servicio mediante la
definición de un bean de Spring :
<bean name="/MyService"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service">
<ref bean="myService"/>
</property>
<property name="serviceInterface">
<value>com.httpInvoker.example.MyService</value>
</property>
</bean>
HTTP invoker
Despliegue del servicio en un contenedor
de servlets :
<servlet>
<servlet-name>myServiceHttpInvoker</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myServiceHttpInvoker</servlet-name>
<url-pattern>/remoting/*</url-pattern>
</servlet-mapping>
HTTP invoker
Creación del bean de Spring para el
cliente :
<bean id="service"
class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl">
<value>http://localhost/remoting/MyService</value>
</property>
<property name="serviceInterface">
<value>com.httpInvoker.example.MyService</value>
</property>
<property name="httpInvokerRequestExecutor">
<bean class=
"org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor"/>
</property>
</bean>
HTTP invoker
Invocación del servicio:
MyService service = (MyService)context.getBean("service");
service.hello();
Conclusiones
¿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
Descargar

Servicios Web ligeros