Tenemos servicios web REST que pueden servir XML o JSON (WCF). Estoy jugando con la idea de implementar Protobufs. ¿Por qué?
PROS
- Menos carga en los servidores.
- Tamaño de mensaje más pequeño: menos tráfico.
- Es más fácil cambiar ahora que más tarde.
CONTRAS
- Necesita ser implementado
- Va a ser más difícil solucionar problemas / detectar mensajes para la depuración.
- Puedo habilitar GZip en el servidor y JSON consumirá tanto tráfico
¿Cuál es su sugerencia y / o experiencia al respecto?
web-services
wcf
serialization
katit
fuente
fuente
Respuestas:
¿El valor comercial de implementarlos excede el costo?
Si implementa, necesita cambiar no solo su servidor, sino todos los clientes (aunque puede admitir ambos formatos y solo cambiar clientes según sea necesario). Eso llevará tiempo y pruebas, lo cual es un costo directo. Y no subestime el tiempo necesario para comprender realmente las memorias intermedias de protocolo (especialmente las razones para hacer que el campo sea obligatorio u opcional), y el tiempo necesario para integrar el compilador de protobuf en su proceso de compilación.
Entonces, ¿el valor excede eso? ¿Se enfrenta a una opción de "nuestros costos de ancho de banda son X% de nuestros ingresos y no podemos soportar eso"? ¿O incluso "necesitamos gastar $ 20,000 para agregar servidores que admitan JSON"?
A menos que tenga una necesidad comercial apremiante, sus "profesionales" no son realmente profesionales, solo una optimización prematura.
fuente
Mantengo apis y alguien antes que yo agregó protobuf (porque era "más rápido"). Lo único más rápido es RTT debido a la menor carga útil, y eso se puede solucionar con JSON comprimido.
La parte que me desagrada es el trabajo relativo para mantener protobuf (en comparación con JSON). Yo uso Java, así que usamos el mapeo de objetos Jackson para JSON. Agregar a una respuesta significa agregar un campo a un POJO. Pero para protobuf tengo que modificar el archivo .proto, luego actualizar la lógica de serialización y deserialización que mueve los datos dentro / fuera de los buffers de protocolo y dentro de POJOs. Sucedió más de una vez que se produjo un lanzamiento en el que alguien agregó un campo y olvidó poner el código de serialización o deserialización para los buffers de protocolo.
Ahora que los clientes se han implementado contra los buffers de protocolo, es casi imposible escapar.
Probablemente puedas adivinar a partir de esto, mi consejo es que no lo hagas.
fuente