La sintassi 3 di protobuf ha reso tutti i campi facoltativi eliminando le parole chiave required
e optional
dalla precedente sintassi di proto2. Leggendo alcuni commenti degli sviluppatori sembra che sia stato fatto per migliorare la compatibilità binario avanti / indietro.
Ma per me, questo potrebbe essere applicato solo eseguendo il versioning dei nomi dei pacchetti, diciamo com.example.messages.v1
e poi permettiamo ai client di implementare i deserializzatori che capiscono. Allo stesso tempo rimuove alcuni contratti dichiarati come un tipo che è utile dal punto di vista dell'ingegneria del software. Ad esempio, se ho
message Location {
double latitude = 1;
double longitude = 2;
}
In proto3 è possibile creare un mezzoLocation
mezzo sostenuto ma non valido non fornendo uno dei campi richiesti.
Non è un grosso svantaggio quando si crea un formato di serializzazione basato sullo schema per lo scambio di dati tra client? Non è peggio spostare un codice di convalida aggiuntivo su ciascun client controllando che tutti i campi obbligatori abbiano valori validi?