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
| Campo | Esquema do Protocol Buffers | JSON |
|---|---|---|
| Extensão | .proto | .json |
| Tipo MIME | text/plain | application/json |
| Usos comuns | Definir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens | APIs web, arquivos de configuração e troca de dados |
| Como abrir | Abra 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 converter | Ao 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 BuffersDefinir 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 BuffersTransferir dados estruturados
APIs web, arquivos de configuração e troca de dados
JSONPonto 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çasPonto 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çasMais 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.