CoderTools

Outil Protocol Buffers

Encoder, décoder et valider les messages Protocol Buffers

Schéma Proto

Exemples de Schémas:

Entrée

Analysez le schéma et sélectionnez un type de message pour générer les champs du formulaire

Sortie

Documentation Protocol Buffers

Qu'est-ce que Protocol Buffers ?

Protocol Buffers (Protobuf) est un mécanisme extensible, indépendant du langage et de la plateforme, pour la sérialisation de données structurées, développé par Google. Il est plus petit, plus rapide et plus simple que XML et JSON pour la sérialisation des données.

Fonctionnalités Principales

  • Indépendant du langage et de la plateforme
  • Plus petit et plus rapide que XML/JSON
  • Typage fort avec définition de schéma
  • Compatibilité ascendante et descendante
  • Génération automatique de code
  • Encodage binaire efficace

Comment Utiliser Cet Outil

  1. Entrez votre définition de schéma .proto dans l'éditeur
  2. Cliquez sur Analyser le Schéma pour valider et analyser
  3. Sélectionnez le type de message souhaité
  4. Pour encoder : Entrez les données JSON et cliquez sur Encoder
  5. Pour décoder : Entrez les données binaires et cliquez sur Décoder
  6. Utilisez « Décodage Brut » pour analyser les données binaires sans schéma

Fonctionnalités de l'Outil

Encoder

Convertir les données JSON en format binaire Protocol Buffers. Prend en charge la saisie par formulaire pour une entrée de données facile avec validation des types.

Décoder

Convertir les données binaires Protocol Buffers en format JSON lisible. Prend en charge les formats d'entrée Base64, Hex et Hex style C.

Décodage Brut

Analyser les données binaires protobuf sans schéma. Utile pour le débogage, la rétro-ingénierie ou l'analyse de messages inconnus.

Saisie par Formulaire

Interface formulaire conviviale qui génère des formulaires de saisie basés sur votre schéma. Prend en charge les messages imbriqués, les énumérations et les champs répétés.

Référence de Syntaxe Proto

Protocol Buffers utilise une syntaxe simple pour définir les types de messages :

syntax = "proto3";

message Person {
    string name = 1;
    int32 id = 2;
    string email = 3;
    
    enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }
    
    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }
    
    repeated PhoneNumber phones = 4;
}
  • syntax: Spécifie la version protobuf (proto2 ou proto3)
  • message: Définit un type de message avec des champs
  • field: Chaque champ a un type, un nom et un numéro unique
  • enum: Définit les types d'énumération
  • repeated: Marque un champ comme répété (tableau/liste)
  • optional: Marque un champ comme optionnel (proto3)

Types Scalaires

Protocol Buffers prend en charge divers types scalaires :

Type Description Défaut
int32, int64Entiers signés (encodage de longueur variable)0
uint32, uint64Entiers non signés0
sint32, sint64Entiers signés avec encodage ZigZag (efficace pour les nombres négatifs)0
fixed32, fixed64Entiers non signés à largeur fixe (4 ou 8 octets)0
sfixed32, sfixed64Entiers signés à largeur fixe (4 ou 8 octets)0
float, doubleNombres à virgule flottante (32 ou 64 bits)0.0
boolValeurs booléennes (vrai/faux)false
stringChaînes de texte encodées UTF-8""
bytesDonnées binaires arbitrairesempty

Types de Fil

Protobuf utilise des types de fil pour déterminer comment lire les valeurs des données binaires :

Type de Fil Signification Utilisé Pour
0Varintint32, int64, uint32, uint64, sint32, sint64, bool, enum
164-bitfixed64, sfixed64, double
2Length-delimitedstring, bytes, embedded messages, packed repeated
532-bitfixed32, sfixed32, float

Meilleures Pratiques

  • Utilisez la syntaxe proto3 pour les nouveaux projets - plus simple et plus largement supporté
  • Gardez les numéros de champs stables - ne jamais réutiliser ou modifier les numéros des champs existants
  • Utilisez des noms de champs significatifs qui décrivent clairement les données
  • Réservez les numéros de champs 1-15 pour les champs fréquemment utilisés (ils utilisent 1 octet)
  • Utilisez le mot-clé 'repeated' pour les tableaux/listes de valeurs
  • Définissez des énumérations pour les champs ayant un ensemble fixe de valeurs possibles

FAQ

Quelle est la différence entre proto2 et proto3 ?

Proto3 simplifie la syntaxe en supprimant les champs obligatoires - tous les champs sont optionnels par défaut. Il modifie également les valeurs par défaut et supprime la détection de présence des champs pour les types scalaires. Proto3 est recommandé pour les nouveaux projets.

Puis-je décoder protobuf sans schéma ?

Oui ! Utilisez la fonctionnalité « Décodage Brut » pour analyser les données binaires sans schéma. Les noms de champs seront affichés comme des numéros (field_1, field_2, etc.) et certaines informations de type peuvent être ambiguës.

Pourquoi mes données encodées sont-elles différentes de ce qui est attendu ?

L'encodage Protobuf est déterministe, mais les valeurs par défaut (0, false, chaînes vides) ne sont généralement pas encodées dans proto3 pour économiser de l'espace. De plus, l'ordre des champs dans JSON n'affecte pas l'encodage binaire.

Comment gérer les messages imbriqués ?

Définissez les messages imbriqués dans votre schéma et utilisez des objets JSON imbriqués. En mode formulaire, cliquez sur le bouton du champ imbriqué pour ouvrir un dialogue d'édition des données imbriquées.

Cas d'Utilisation Courants

  • Communication inter-services dans les microservices (gRPC)
  • Stockage de données et mise en cache
  • Fichiers de configuration
  • Protocoles réseau et API

Références