La syntaxe 3 de protobuf a rendu tous les champs facultatifs en supprimant les mots clés required
et la optional
syntaxe précédente de proto2. En lisant certains commentaires des développeurs, il semble que cela ait été fait pour améliorer la compatibilité binaire avant / arrière.
Mais pour moi, cela pourrait être appliqué en versionnant simplement les noms des packages, en disant com.example.messages.v1
puis en laissant les clients implémenter des désérialiseurs qu'ils comprennent. En même temps, il supprime certains contrats définis comme un type qui sont utiles du point de vue de l'ingénierie logicielle. Par exemple, si j'ai
message Location {
double latitude = 1;
double longitude = 2;
}
Dans proto3, il est possible de créer un demi-dossier mais parfaitement valide Location
en ne fournissant pas l'un des champs requis.
N'est-ce pas un gros inconvénient lors de la création d'un format de sérialisation basé sur un schéma pour l'échange de données entre clients? N'est-il pas pire de déplacer du code de validation supplémentaire vers chaque client en vérifiant que tous les champs obligatoires ont des valeurs valides?