Sécurité de la modification du numéro de champ de proto

Dec 10 2020

Par exemple, si j'ai changé de:

message Request {
  int foo = 1;
}

à

message Request {
  int bar = 1;
  int foo = 2;
}

Est-il sûr de passer foode 1 à 2? Les documents disent de ne pas le faire These numbers are used to identify your fields in the message binary format, and should not be changed once your message type is in use., mais j'aimerais savoir pourquoi.

Réponses

1 Matteo Dec 10 2020 at 17:12

Si vous disposez d'une version sérialisée du message généré avec la première version, vous ne pourrez pas désérialiser avec la deuxième version du message. Si vous utilisez protobuf pour générer un modèle à stocker dans une base de données ou à publier dans un courtier comme Apache Kafka, vous devez suivre la convention. Si vous utilisez proto buffer pour générer un modèle et un service pour une utilisation en ligne, vous ne devez rien casser (si vous régénérez tous les modèles)

Voir aussi le mot-clé réservé pour ne pas réutiliser un ancien numer. Lectures complémentaires aussi ici