web-dev-qa-db-fra.com

Tampon de protocole: le changement de nom de champ rompt-il le message?

Avec le tampon de protocole, le changement de nom de champ d'un message permet-il toujours de le rendre compatible en amont? Je n'ai trouvé aucune citation à ce sujet.

Par exemple: message original

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
}

Changer pour:

message Person {
  required string full_name = 1;
  required int32 id = 2;
  optional string email = 3;
}
21
tiboo

La modification d'un nom de champ n'affectera pas le codage de protobuf ou la compatibilité entre les applications qui utilisent des définitions de proto qui ne diffèrent que par les noms de champ.

L'encodage de protobuf binaire est basé sur les numéros de balises, c'est donc ce que vous devez conserver.

Vous pouvez même modifier un type de champ dans une certaine mesure (consultez la table des types sur https://developers.google.com/protocol-buffers/docs/encoding#structure ) à condition que son type de fil reste le même , mais cela nécessite des considérations supplémentaires, par exemple en modifiant uint32 à uint64 est sûr du point de vue de votre code d'application et pour une certaine définition de "mieux" vaut mieux que de simplement définir un nouveau champ.

La modification d'un nom de champ affectera la représentation json, si vous utilisez cette fonction.

25
Oleg Estekhin