La sintassi 3 di protobuf ha reso tutti i campi facoltativi eliminando le parole chiave required
e optional
dalla precedente sintassi proto2. Leggendo alcuni commenti degli sviluppatori sembra che sia stato fatto per migliorare la compatibilità binaria avanti / indietro.
Ma per me, ciò potrebbe essere applicato semplicemente eseguendo il controllo delle versioni dei nomi dei pacchetti, dire com.example.messages.v1
e quindi consentire ai client di implementare i deserializzatori che comprendono. Allo stesso tempo rimuove alcuni contratti dichiarati come un tipo utili dal punto di vista dell'ingegneria del software. Per esempio se ho
message Location {
double latitude = 1;
double longitude = 2;
}
In proto3 è possibile creare una metà supportata ma perfettamente valida Location
non fornendo uno dei campi richiesti.
Non è un grosso svantaggio quando si crea un formato di serializzazione basato su schema per lo scambio di dati tra client? Non è peggio spostare un codice di convalida aggiuntivo su ciascun client verificando che tutti i campi richiesti abbiano valori validi?