Die Syntax 3 von protobuf machte alle Felder optional required
und optional
löschte die Schlüsselwörter und aus der vorherigen Proto2-Syntax. Einige Kommentare von Entwicklern lassen vermuten, dass dies zur Verbesserung der binären Vorwärts- / Rückwärtskompatibilität getan wurde.
Aber für mich könnte das durchgesetzt werden, indem einfach die Paketnamen versioniert werden com.example.messages.v1
und dann die Clients Deserialisierer implementieren, die sie verstehen. Gleichzeitig werden einige Verträge entfernt, die aus Sicht der Softwareentwicklung als nützlich eingestuft werden. Zum Beispiel, wenn ich habe
message Location {
double latitude = 1;
double longitude = 2;
}
In proto3 ist es möglich, ein halbgesichertes, aber vollkommen gültiges Feld zu erstellen, Location
indem eines der erforderlichen Felder nicht angegeben wird.
Ist das nicht ein großer Nachteil beim Erstellen eines schemabasierten Serialisierungsformats für den Datenaustausch zwischen Clients? Ist es nicht schlimmer, zusätzlichen Validierungscode auf jeden Client zu verschieben und zu überprüfen, ob alle erforderlichen Felder gültige Werte enthalten?