A sintaxe 3 do protobuf tornou todos os campos opcionais, descartando as palavras-chave required
e a optional
sintaxe proto2 anterior. Lendo alguns comentários dos desenvolvedores , parece que foi feito para melhorar a compatibilidade binária para frente / trás.
Mas, para mim, isso poderia ser aplicado apenas com a versão dos nomes dos pacotes, digamos com.example.messages.v1
e, em seguida, permitindo que os clientes implementem desserializadores que eles entendem. Ao mesmo tempo, remove alguns contratos declarados como um tipo que são úteis do ponto de vista da engenharia de software. Por exemplo, se eu tiver
message Location {
double latitude = 1;
double longitude = 2;
}
No proto3, é possível criar um meio respaldo, mas perfeitamente válido Location
, não fornecendo um dos campos obrigatórios.
Isso não é uma grande desvantagem ao criar um formato de serialização baseado em esquema para a troca de dados entre clientes? Não é pior mover código de validação extra para cada cliente, verificando se todos os campos obrigatórios têm valores válidos?