Format Atlas

Comparar

Protocol Buffers ou JSON

Protocol Buffers define mensagens tipadas a partir de esquemas `.proto` e oferece wire format binário baseado em números de campo, além de um mapeamento ProtoJSON separado. JSON é texto geral segundo a RFC 8259 e não pressupõe um esquema específico.

Qual formato você deve escolher?

Escolha Protobuf para mensagens RPC ou entre serviços quando contratos tipados e compatibilidade binária forem gerenciados. Escolha JSON para estruturas textuais genéricas e ferramentas JSON amplas.

Indicado para Esquema do Protocol Buffers

Definir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens

  • Gerar código para diferentes linguagens com protoc
  • Definir mensagens para RPC e comunicação entre serviços

Indicado para JSON

APIs web, arquivos de configuração e troca de dados

  • Transferir dados estruturados

Informações básicas

CampoEsquema do Protocol BuffersJSON
Extensão.proto.json
Tipo MIMEtext/plainapplication/json
Usos comunsDefinir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagensAPIs web, arquivos de configuração e troca de dados
Como abrirAbra em um editor de texto ou IDE com suporte a Protocol Buffers. Para validar sintaxe e imports, compile com a versão do protoc e as configurações usadas pelo projeto.Abra em um editor de texto, IDE ou visualizador compatível com JSON.
Exportar ou converterAo migrar para outro formato de esquema, mapeie tipos, números de campo, valores padrão, enums e regras de compatibilidade. Depois gere o código e teste dados reais. Trocar a extensão para .json ou para uma extensão binária não converte o arquivo.Aplicativos ou ferramentas de conversão podem convertê-lo para formatos como CSV.

Escolha por finalidade

Gerar código para diferentes linguagens com protoc

Definir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens

Esquema do Protocol Buffers

Definir mensagens para RPC e comunicação entre serviços

Definir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens

Esquema do Protocol Buffers

Transferir dados estruturados

APIs web, arquivos de configuração e troca de dados

JSON

Ponto principal 1

Os dados binários wire do Protobuf dependem de definição `.proto` e números de campo. JSON representa objetos e arrays textuais sem exigir esquema; ProtoJSON mapeia separadamente tipos Protobuf para valores JSON.

Mais sobre as diferenças

Ponto principal 2

ProtoJSON converte bytes em strings base64, int64 em strings, enums em nomes e campos em chaves JSON. Essas regras não são o wire format binário nem um JSON Schema arbitrário.

Mais sobre as diferenças

Mais sobre as diferenças

Use Protobuf para contratos tipados entre serviços e intercâmbio binário compacto. Use JSON para interfaces textuais genéricas. Se usar a representação JSON do Protobuf, siga ProtoJSON e não presuma que qualquer documento JSON seja equivalente. Teste presença, null, faixas, campos desconhecidos e evolução do esquema.

  • Mensagens wire Protobuf precisam de esquema correspondente para interpretar números de campo e tipos. A sintaxe JSON genérica não exige esquema.
  • ProtoJSON possui mapeamentos e regras de compatibilidade próprios; é menos eficiente que o wire binário e não preserva campos desconhecidos da mesma forma.
  • A conversão pode afetar presença, precisão de inteiros, nomes de enum, chaves de mapa, oneof, null e campos desconhecidos. Valide com bibliotecas reais e versões antigas e novas do esquema.

Perguntas frequentes

ProtoJSON é intercambiável com qualquer documento JSON?

Não. ProtoJSON representa esquemas expressáveis em Protobuf e segue mapeamentos próprios; não representa todo JSON Schema nem preserva todo comportamento do wire format.

Saiba mais

Referências e especificações