Implementando servicios REST con jaxrs sustituyendo JSON por Protocol Buffer

Una de las particularidades de las orientaciones SOA es que servicios consumen servicios, y desde hace un tiempo ya estos servicios no se orientan a SOAP con webservices si no que se orientan más a servicios más ligeros basados en REST. En la siguiente firgura podemos ver un ejemplo de lo comentado

Donde podemos ver, serialización y des-serialización basada en JAXB, exposición de servicios usando JAX-RS y sobre todo vemos que el objeto intercambiado entre los servicios (Book) se transporta en formato JSON entre el consumidor y el publicador del servicio.

Esto está bien como primera aproximación pero lo mismo que hace 10 años se intercambiaban XMLs y pasamos a JSON ahora parece que sería interesante pasar de JSON a alugno de los protocolos binarios que aportaán más velocidad y por ende más rendimiento. Los candidatos principales son (Avro y Protobuf).

Una vez que tenemos claro el objetivo, ¿cómo podríamos hacerlo?, en realidad revisando el diagrama anterior parece que debería ser sencillo hacer el cambio. Para ello solo hay que registrar un nuevo protcolo para que JAXRS lo identifique y sea capaz de gestionarlo. Tenemos que implementar las siguientes dos clases (javax.ws.rs.ext.MessageBodyReader y javax.ws.rs.ext.MessageBodyWriter)  que le indican al servicio como tiene que leer la información de la petición REST y como tiene que escribir la respuesta. Siguiendo este artículo podemos ver como se hace esto para Protobuf. Además para poder completar el ejemplo hay que seguir un manual de Protobuf  de los muchos existentes en internet.

Para hacer lo mismo con Avro habría que implemntar estas dos clases y definir un nuevo tipo de contenido por ejemplo application/avro. Con esto podríamos tener servicios que consuman y devuelvan peticiones con objetos serializados en Avro o en Protobuf igual que hacemos con los servicios que exponen JSON

00

More Blog Entries

0 Comments