2011-07-07 21 views
5

Me preguntaba si el formato de datos serializados del búfer de protocolo permanece constante en las versiones de compilador protobuf y biblioteca de cliente.Compatibilidad de formato de datos entre las versiones de protobuf

En otras palabras, ¿necesito usar la misma versión del compilador para generar mis clases de Python, Java y C++? ¿Y todos estos clientes necesitan usar la misma versión de las bibliotecas de protobuf?

This post tipo de respuestas a mi pregunta, pero su respuesta aceptada es específica para la versión protobuf del OP.

Respuesta

3

Sí, esa es prácticamente la idea. No debería importar qué biblioteca usará, siempre que siga la especificación. Tenga en cuenta que los mismos datos pueden representarse de maneras ligeramente diferentes, por ejemplo, el orden de campo no debe importar al cliente, y mientras es común para que los clientes escriban campos en orden ascendente, se requiere explícitamente que los clientes procesen campos en cualquier orden Todo lo que digo aquí es que podría no ser exactamente los mismos bytes en el mismo orden, pero debería funcionar bien desde cualquier cliente.

Tenga en cuenta que algunas implementaciones pueden ofrecer funciones adicionales (* tos * como el mío ofrece compatibilidad de herencia), destinadas a uso principalmente solo dentro de ese único cliente. En ese caso, esperaría a: esperar que esas características sean obvias cuando se usen, yb: debería siempre producir una corriente protobuf válida (puede optar por ignorar esos campos, o apoyarlos como bytes con el fin de viaje ida y vuelta).

+0

si no es "exactamente los mismos bytes en el mismo orden", muchos clientes se romperán. cualquiera que confíe en hashing y firmas de criptografía. – jaybny

Cuestiones relacionadas