Inspetor de Protobuf e gRPC

Cole a definição Protocol Buffers para revisar os campos e as assinaturas RPC detectados. O resultado resume a estrutura, sem compilar código cliente.

Funciona localmente no seu navegador
Esta ferramenta processa todos os dados localmente no seu navegador.
Definição .protoCole uma definição Protocol Buffers para listar mensagens, enums, campos com suas tags, métodos gRPC e um exemplo JSON estrutural.
Mensagens, enums e serviços

Como ler uma definição .proto no navegador

Cole uma definição Protocol Buffers e clique em Inspecionar localmente: a página lista o que consegue ler do texto — a linha de sintaxe, o pacote, cada mensagem com seus campos na ordem do arquivo, enums com seus valores, grupos oneof e serviços gRPC com seus métodos, marcando as chamadas em streaming. Para a primeira mensagem do arquivo é montado um exemplo JSON estrutural. Nada é compilado e nada é enviado: sem protoc, sem chamada gRPC, sem ida e volta ao servidor.

O leitor trata texto proto2 e proto3 do mesmo jeito, por padrões, então devolve o que está escrito, não o que o protoc faria com aquilo. Com o painel de rede do navegador aberto, inspecionar uma definição não gera requisição alguma; o resumo, os contadores e a tabela são preenchidos dentro da aba.

  1. Cole sua definição na caixa ou clique em Carregar exemplo para partir do arquivo incluído: uma mensagem User com três campos e um serviço Users com uma RPC, que os contadores informam como 1 messages, 0 enums, 1 services e 4 fields / RPCs.
  2. Clique em Inspecionar localmente e leia o Resumo do protocolo de cima para baixo: syntax = "proto3", o nome do pacote e, em seguida, cada mensagem com seus campos como escritos — map<string, string> metadata = 4;, optional string idempotency_key = 11; e as opções de campo, mantidas exatamente como aparecem.
  3. Confira a tabela abaixo. Cada campo, enum e RPC recebe uma linha: um campo map aparece como map<string, string> · tag 4, uma mensagem aninhada surge com o nome pontuado, como Wrapper.Inner, e um método em streaming como WatchRequest → stream CaptureResponse.
  4. Use Copiar para levar o resumo inteiro para a área de transferência — o bloco é copiado como está, verificado do clique até a colagem — ou Limpar para esvaziar a caixa, o resumo, os contadores e a tabela de uma só vez.

O que o resumo cobre e o que o leitor deixa de lado

O exemplo JSON segue o mapeamento do proto3

Os valores recebem o tipo que o JSON do proto3 usa: um campo string vira "example", int64 e uint64 viram a string "0", bytes vira "base64-data", bool vira true e um campo repeated é um array de um elemento. Um campo map vira um objeto com uma chave de exemplo, e um campo de mensagem é expandido no próprio objeto aninhado.

Um campo de enum assume o primeiro valor declarado naquele enum, então um campo Currency fica "CURRENCY_UNSPECIFIED" em vez de um número. Uma mensagem que referencia a si mesma é cortada em um objeto vazio, o que mantém o exemplo finito, e só a primeira mensagem do arquivo ganha exemplo — coloque o tipo que interessa no começo se quiser vê-lo.

Tipos de campo que vêm de outro lugar

Quando um tipo de campo não está declarado no texto colado — google.protobuf.Timestamp, por exemplo, ou uma mensagem de um import — o exemplo mostra um objeto vazio e o painel acrescenta um aviso como “1 field type(s) come from imported or external definitions”. O nome do tipo continua no resumo e na tabela.

A ferramenta nunca busca o arquivo importado: uma linha import não muda a saída e nenhuma requisição sai da página. Trate o exemplo como esboço estrutural para conferir com o schema real, não como um payload pronto para enviar a um servidor.

O que o leitor lê e o que ignora

Comentários são ignorados, tanto // quanto /* */, e caracteres dentro de um literal de string não são interpretados, então um valor padrão como [default = "{"] é lido corretamente. Uma mensagem aninhada vira um registro próprio com nome pontuado, e a mensagem externa lista apenas os campos declarados diretamente nela.

Algumas linhas ficam de fora de propósito: declarações reserved, faixas extensions, opções de arquivo como option java_package = "com.acme"; e linhas import. Elas não aparecem no resumo, na tabela nem nos contadores — a saída descreve apenas mensagens, enums, campos e RPCs.

Erros, limites e arquivos grandes

Um texto sem declaração de mensagem, enum ou serviço para com “No message, enum or service declaration was found in this .proto text.”, e um bloco não fechado para com o nome do bloco, como “Unclosed message block: User”. Ler por padrões também significa que não há validação no nível do protoc: número de campo duplicado, tag 0 e tag na faixa reservada 19000–19999 são listados sem objeção.

A saída lista tudo o que encontra e por isso cresce com o arquivo: 305 KB com 600 mensagens geraram 12.200 linhas em cerca de um terço de segundo, e 1,5 MB com 3.000 mensagens e 60.200 linhas terminaram em menos de dois segundos no Chrome. Uma linha de enum na tabela mostra os 12 primeiros valores e depois reticências, enquanto o resumo imprime todos.

Ferramentas recentes: