Skip to content
Latchkey

O Que É um Protobuf Schema? Protocol Buffers Explicados

Um protobuf schema é um arquivo .proto que define a estrutura das mensagens para o Protocol Buffers, um formato de serialização binário compacto do Google.

Protocol Buffers (protobuf) é uma forma rápida, compacta e orientada a schema de serializar dados, muito usada para comunicação entre serviços. O schema - um arquivo .proto - é o contrato: ele declara os campos de cada mensagem, e um compilador o transforma em código na sua linguagem. Levar protobuf a um projeto significa um passo de geração de código que pertence ao CI.

O que é um protobuf schema

Um protobuf schema é um arquivo .proto de texto simples que declara mensagens e seus campos, cada campo tendo um tipo, um nome e um número único. Os números, não os nomes, identificam os campos na transmissão, o que é o que permite ao protobuf codificar dados de forma compacta e evoluir com segurança.

Codificação binária orientada a schema

Diferente do JSON, o protobuf não embute nomes de campo nos bytes serializados - ele usa os números de campo do schema. Isso torna a saída pequena e rápida de analisar, mas também significa que você não pode ler os bytes sem o schema. O schema é obrigatório, não documentação opcional.

Geração de código

Um compilador lê o arquivo .proto e gera classes ou structs na sua linguagem-alvo para codificar e decodificar mensagens. Esse código gerado é o que sua aplicação de fato importa. Como é gerado, costuma ser regenerado no CI em vez de commitado, mantendo-o em sincronia com o schema.

Protobuf no CI

Builds de CI normalmente executam o compilador de protobuf para regenerar código, fazem lint do schema em busca de estilo e mudanças que quebram compatibilidade, e verificam a compatibilidade retroativa para que uma edição de schema não possa quebrar silenciosamente clientes existentes. A detecção de mudanças incompatíveis no arquivo .proto é um gate de CI valioso para APIs compartilhadas.

Protobuf checks in a pipeline
# Generate code and check compatibility in CI
steps:
  - run: buf lint
  - run: buf breaking --against ".git#branch=main"
  - run: buf generate

Nota Latchkey

O compilador de protobuf e ferramentas como o buf são apenas CLIs que seu job instala. No Latchkey esses downloads de ferramentas ficam em cache entre execuções, então jobs de geração de código não rebaixam o compilador a cada build.

Principais conclusões

  • Um protobuf schema é um arquivo .proto que declara mensagens e campos numerados para um formato binário compacto.
  • A codificação usa números de campo, não nomes, então o schema é necessário para ler os bytes.
  • O CI regenera o código a partir do schema e barra mudanças que quebram compatibilidade para proteger clientes existentes.

Guias relacionados