Ferramenta Protocol Buffers
Codifique, decodifique e valide mensagens Protocol Buffers
Schema Proto
Informações do Schema
Entrada
Analise o schema e selecione um tipo de mensagem para gerar campos de formulário
Saída
Campos Brutos
| Campo # | Tipo Wire | Valor |
|---|
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
- Digite sua definição de schema .proto no editor de schema
- Clique em Analisar Schema para validar e analisar o schema
- Selecione o tipo de mensagem com o qual deseja trabalhar
- Para codificar: Digite dados JSON e clique em Codificar
- Para decodificar: Digite dados binários e clique em Decodificar
- 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 camposfield: Cada campo tem um tipo, nome e número únicoenum: Define tipos de enumeraçãorepeated: 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, int64 | Inteiros com sinal (codificação de comprimento variável) | 0 |
| uint32, uint64 | Inteiros sem sinal | 0 |
| sint32, sint64 | Inteiros com sinal com codificação ZigZag (eficiente para números negativos) | 0 |
| fixed32, fixed64 | Inteiros sem sinal de largura fixa (4 ou 8 bytes) | 0 |
| sfixed32, sfixed64 | Inteiros com sinal de largura fixa (4 ou 8 bytes) | 0 |
| float, double | Números de ponto flutuante (32 ou 64 bit) | 0.0 |
| bool | Valores booleanos (verdadeiro/falso) | false |
| string | Strings de texto codificadas em UTF-8 | "" |
| bytes | Dados binários arbitrários | empty |
Tipos Wire
Protobuf usa tipos wire para determinar como ler valores de dados binários:
| Tipo Wire | Significado | Usado Para |
|---|---|---|
| 0 | Varint | int32, int64, uint32, uint64, sint32, sint64, bool, enum |
| 1 | 64-bit | fixed64, sfixed64, double |
| 2 | Length-delimited | string, bytes, embedded messages, packed repeated |
| 5 | 32-bit | fixed32, 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