Outil Protocol Buffers
Encoder, décoder et valider les messages Protocol Buffers
Schéma Proto
Informations du Schéma
Entrée
Analysez le schéma et sélectionnez un type de message pour générer les champs du formulaire
Sortie
Champs Bruts
| N° Champ | Type de Fil | Valeur |
|---|
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
- Entrez votre définition de schéma .proto dans l'éditeur
- Cliquez sur Analyser le Schéma pour valider et analyser
- Sélectionnez le type de message souhaité
- Pour encoder : Entrez les données JSON et cliquez sur Encoder
- Pour décoder : Entrez les données binaires et cliquez sur Décoder
- 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 champsfield: Chaque champ a un type, un nom et un numéro uniqueenum: Définit les types d'énumérationrepeated: 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, int64 | Entiers signés (encodage de longueur variable) | 0 |
| uint32, uint64 | Entiers non signés | 0 |
| sint32, sint64 | Entiers signés avec encodage ZigZag (efficace pour les nombres négatifs) | 0 |
| fixed32, fixed64 | Entiers non signés à largeur fixe (4 ou 8 octets) | 0 |
| sfixed32, sfixed64 | Entiers signés à largeur fixe (4 ou 8 octets) | 0 |
| float, double | Nombres à virgule flottante (32 ou 64 bits) | 0.0 |
| bool | Valeurs booléennes (vrai/faux) | false |
| string | Chaînes de texte encodées UTF-8 | "" |
| bytes | Données binaires arbitraires | empty |
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 |
|---|---|---|
| 0 | Varint | int32, int64, uint32, uint64, sint32, sint64, bool, enum |
| 1 | 64-bit | fixed64, sfixed64, double |
| 2 | Length-delimited | string, bytes, embedded messages, packed repeated |
| 5 | 32-bit | fixed32, 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