Składnia 3 protokołu protobuf spowodowała, że wszystkie pola stały się opcjonalne, odrzucając słowa kluczowe required
i optional
poprzednią składnię proto2. Czytając niektóre komentarze od programistów , wydaje się, że zrobiono to w celu zwiększenia kompatybilności binarnej do przodu / do tyłu.
Ale dla mnie może to być wymuszone przez wersjonowanie nazw pakietów, powiedzmy, com.example.messages.v1
a następnie pozwólmy klientom wdrożyć deserializatory, które rozumieją. Jednocześnie usuwa niektóre umowy określone jako typ, które są użyteczne z punktu widzenia inżynierii oprogramowania. Na przykład jeśli mam
message Location {
double latitude = 1;
double longitude = 2;
}
W proto3 możliwe jest utworzenie kopii zapasowej w połowie wspieranej, ale doskonale poprawnej Location
, nie podając jednego z wymaganych pól.
Czy nie jest to duża wada podczas tworzenia formatu serializacji opartego na schemacie do wymiany danych między klientami? Czy nie jest gorsze przenoszenie dodatkowego kodu weryfikacyjnego do każdego klienta sprawdzającego, czy wszystkie wymagane pola mają prawidłowe wartości?