Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

Implementando servicios REST con jaxrs sustituyendo JSON por Protocol Buffer

Gustavo Fernández
Gustavo Fernández

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

Implementando servicios REST con jaxrs sustituyendo JSON por Protocol Buffer

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

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *