Format Atlas

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émentSchéma Protocol BuffersJSON
Extension.proto.json
Type MIMEtext/plainapplication/json
Usages courantsDéfinir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langagesAPI web, fichiers de configuration et échange de données
Comment ouvrirOuvrez-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 convertirPour 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 Buffers

Dé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 Buffers

Transférer des données structurées

API web, fichiers de configuration et échange de données

JSON

Point 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érences

Point 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érences

En 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.

En savoir plus

Références et spécifications