La sintaxis 3 de protobuf hizo que todos los campos fueran opcionales eliminando las palabras clave required
y optional
de la sintaxis proto2 anterior. Al leer algunos comentarios de los desarrolladores , parece que se hizo para mejorar la compatibilidad binaria hacia adelante / hacia atrás.
Pero para mí, eso podría hacerse cumplir simplemente versionando los nombres de los paquetes, digamos com.example.messages.v1
y luego permitiendo que los clientes implementen deserializadores que entiendan. Al mismo tiempo, elimina algunos contratos establecidos como un tipo que son útiles desde el punto de vista de la ingeniería de software. Por ejemplo si tengo
message Location {
double latitude = 1;
double longitude = 2;
}
En proto3 es posible crear un medio respaldado pero perfectamente válido Location
al no proporcionar uno de los campos obligatorios.
¿No es un gran inconveniente al crear un formato de serialización basado en esquemas para el intercambio de datos entre clientes? ¿No es peor mover el código de validación adicional a cada cliente comprobando que todos los campos obligatorios tienen valores válidos?