CoderTools

Ferramenta Protocol Buffers

Codifique, decodifique e valide mensagens Protocol Buffers

Schema Proto

Schemas de Exemplo:

Entrada

Analise o schema e selecione um tipo de mensagem para gerar campos de formulário

Saída

Documentação Protocol Buffers

O que é Protocol Buffers?

Protocol Buffers (Protobuf) é um mecanismo extensível, neutro em relação à linguagem e plataforma, para serialização de dados estruturados, desenvolvido pelo Google. É menor, mais rápido e mais simples que XML e JSON para serialização de dados.

Recursos Principais

  • Neutro em relação à linguagem e plataforma
  • Menor e mais rápido que XML/JSON
  • Tipagem forte com definição de schema
  • Compatibilidade retroativa e futura
  • Geração automática de código
  • Codificação binária eficiente

Como Usar Esta Ferramenta

  1. Digite sua definição de schema .proto no editor de schema
  2. Clique em Analisar Schema para validar e analisar o schema
  3. Selecione o tipo de mensagem com o qual deseja trabalhar
  4. Para codificar: Digite dados JSON e clique em Codificar
  5. Para decodificar: Digite dados binários e clique em Decodificar
  6. Use Decodificação Bruta para analisar dados binários sem schema

Recursos da Ferramenta

Codificar

Converta dados JSON para formato binário Protocol Buffers. Suporta entrada baseada em formulário para fácil entrada de dados com validação de tipo.

Decodificar

Converta dados binários Protocol Buffers de volta para formato JSON legível. Suporta formatos de entrada Base64, Hex e hex estilo C.

Decodificação Bruta

Analise dados binários protobuf sem schema. Útil para depuração, engenharia reversa ou análise de mensagens desconhecidas.

Entrada de Formulário

Interface de formulário amigável que gera formulários de entrada baseados em seu schema. Suporta mensagens aninhadas, enums e campos repetidos.

Referência de Sintaxe Proto

Protocol Buffers usa uma sintaxe simples para definir tipos de mensagem:

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: Especifica a versão do protobuf (proto2 ou proto3)
  • message: Define um tipo de mensagem com campos
  • field: Cada campo tem um tipo, nome e número único
  • enum: Define tipos de enumeração
  • repeated: Marca um campo como repetido (array/lista)
  • optional: Marca um campo como opcional (proto3)

Tipos Escalares

Protocol Buffers suporta vários tipos escalares:

Tipo Descrição Padrão
int32, int64Inteiros com sinal (codificação de comprimento variável)0
uint32, uint64Inteiros sem sinal0
sint32, sint64Inteiros com sinal com codificação ZigZag (eficiente para números negativos)0
fixed32, fixed64Inteiros sem sinal de largura fixa (4 ou 8 bytes)0
sfixed32, sfixed64Inteiros com sinal de largura fixa (4 ou 8 bytes)0
float, doubleNúmeros de ponto flutuante (32 ou 64 bit)0.0
boolValores booleanos (verdadeiro/falso)false
stringStrings de texto codificadas em UTF-8""
bytesDados binários arbitráriosempty

Tipos Wire

Protobuf usa tipos wire para determinar como ler valores de dados binários:

Tipo Wire Significado Usado Para
0Varintint32, int64, uint32, uint64, sint32, sint64, bool, enum
164-bitfixed64, sfixed64, double
2Length-delimitedstring, bytes, embedded messages, packed repeated
532-bitfixed32, sfixed32, float

Melhores Práticas

  • Use sintaxe proto3 para novos projetos - é mais simples e amplamente suportada
  • Mantenha os números de campo estáveis - nunca reutilize ou altere números para campos existentes
  • Use nomes de campo significativos que descrevam claramente os dados
  • Reserve números de campo 1-15 para campos usados com frequência (eles usam 1 byte)
  • Use a palavra-chave 'repeated' para arrays/listas de valores
  • Defina enums para campos que têm um conjunto fixo de valores possíveis

FAQ

Qual é a diferença entre proto2 e proto3?

Proto3 simplifica a sintaxe removendo campos obrigatórios - todos os campos são opcionais por padrão. Também altera valores padrão e remove detecção de presença de campo para tipos escalares. Proto3 é recomendado para novos projetos.

Posso decodificar protobuf sem um schema?

Sim! Use o recurso 'Decodificação Bruta' para analisar dados binários sem um schema. Nomes de campos serão mostrados como números (field_1, field_2, etc.) e algumas informações de tipo podem ser ambíguas.

Por que meus dados codificados são diferentes do esperado?

A codificação Protobuf é determinística, mas valores padrão (0, false, strings vazias) normalmente não são codificados no proto3 para economizar espaço. Além disso, a ordem dos campos no JSON não afeta a codificação binária.

Como lidar com mensagens aninhadas?

Defina mensagens aninhadas em seu schema e use objetos JSON aninhados. No modo formulário, clique no botão do campo aninhado para abrir um diálogo para editar dados aninhados.

Casos de Uso Comuns

  • Comunicação entre serviços em microsserviços (gRPC)
  • Armazenamento de dados e cache
  • Arquivos de configuração
  • Protocolos de rede e APIs

Referências