Comparer
Protocol Buffers ou JSON
Protocol Buffers définit des messages typés depuis des schémas `.proto`, un wire format binaire fondé sur les numéros de champ et un mappage ProtoJSON distinct. JSON est un format texte général selon RFC 8259, sans schéma présupposé.
Quel format choisir ?
Choisissez Protobuf pour les messages RPC ou interservices si contrats typés et compatibilité binaire sont gérés. Choisissez JSON pour des structures textuelles générales et des outils JSON variés.
Adapté pour Schéma Protocol Buffers
Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages
- Générer du code par langage avec protoc
- Définir les messages d’appels RPC et de communication entre services
Adapté pour JSON
API web, fichiers de configuration et échange de données
- Transférer des données structurées
Informations générales
| Élément | Schéma Protocol Buffers | JSON |
|---|---|---|
| Extension | .proto | .json |
| Type MIME | text/plain | application/json |
| Usages courants | Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages | API web, fichiers de configuration et échange de données |
| Comment ouvrir | Ouvrez-le dans un éditeur de texte ou un IDE compatible Protocol Buffers. Pour vérifier la syntaxe et les imports, compilez-le avec la version et les options de protoc du projet. | Ouvrez-le dans un éditeur de texte, un IDE ou un visualiseur compatible JSON. |
| Exporter ou convertir | Pour passer à un autre format de schéma, faites correspondre les types, numéros de champs, valeurs par défaut, énumérations et règles de compatibilité. Générez ensuite le code et testez des données réelles. Changer l’extension en .json ou en extension binaire ne convertit pas le fichier. | Des applications ou outils de conversion peuvent le convertir vers des formats tels que CSV. |
Choisir selon l’usage
Générer du code par langage avec protoc
Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages
Schéma Protocol BuffersDéfinir les messages d’appels RPC et de communication entre services
Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages
Schéma Protocol BuffersTransférer des données structurées
API web, fichiers de configuration et échange de données
JSONPoint clé 1
Les données wire binaires Protobuf dépendent d'une définition `.proto` et des numéros de champ. JSON représente objets et tableaux textuels sans schéma ; ProtoJSON mappe séparément les types Protobuf en valeurs JSON.
En savoir plus sur les différencesPoint clé 2
ProtoJSON représente bytes en chaînes base64, int64 en chaînes, enums par leur nom et transforme les noms de champ en clés JSON. Ce n'est ni le wire binaire ni un JSON Schema quelconque.
En savoir plus sur les différencesEn savoir plus sur les différences
Utilisez Protobuf pour des contrats typés entre services et l'échange binaire compact. Utilisez JSON pour des interfaces textuelles générales. Pour la représentation JSON de Protobuf, suivez ProtoJSON sans supposer que tout document JSON est équivalent. Vérifiez présence, null, plages numériques, champs inconnus et évolution du schéma.
- Interpréter numéros de champ et types d'un message wire Protobuf exige un schéma correspondant. La syntaxe JSON générale n'en exige pas.
- ProtoJSON a des mappages et règles de compatibilité propres ; il est moins efficace que le wire binaire et ne conserve pas les champs inconnus de la même façon.
- La conversion peut changer présence, précision entière, noms d'enum, clés de map, oneof, null et champs inconnus. Validez avec les bibliothèques et versions de schéma réellement utilisées.
Questions fréquentes
ProtoJSON est-il interchangeable avec tout document JSON ?
Non. ProtoJSON représente des schémas exprimables en Protobuf selon son mappage et ne peut pas représenter tout JSON Schema ni préserver chaque comportement wire.