Buffers de protocolo v3

Neste capítulo, será discutido como usar os Buffers de protocolo com projeto de API. Para simplificar a experiência do desenvolvedor e melhorar a eficiência do ambiente de execução, as APIs gRPC precisam usar buffers da terceira versão do protocolo (proto3) para fazer a definição das APIs.

Os Buffers de protocolo são uma Linguagem de definição de interface (IDL, na sigla em inglês) simples e neutra em relação à plataforma e à linguagem para definição de esquemas de estrutura de dados e interfaces de programação. Eles são compatíveis com formatos de conexão binária e de texto e funcionam com vários protocolos de conexão diferentes em diferentes plataformas.

O proto3 é a última versão dos Buffers de protocolo e inclui as seguintes alterações em relação ao proto2:

  • A presença de campos, também conhecida como hasField, é removida dos campos primitivos por padrão. O valor padrão dos campos primitivos não definidos é definido pela linguagem.
    • A presença de um campo de mensagem ainda está disponível, o que pode ser testado usando o método hasField gerado pelo compilador ou comparado a nulo/ ao valor sentinela definido pela implementação.
    • A partir do protobuf v3.14, os campos primitivos podem distinguir entre o valor padrão e o não definido usando a palavra-chave optional, embora isso geralmente não é recomendado.
  • O valor padrão definido pelo usuário para campos não está mais disponível.
  • As definições do enum precisam começar com valor de enum zero.
  • Os campos obrigatórios não estão mais disponíveis.
  • As extensões não estão mais disponíveis. Use google.protobuf.Any.
    • Uma exceção especial é concedida para google/protobuf/descriptor.proto por motivos de compatibilidade com versões anteriores e ambientes de execução.
  • A sintaxe do grupo foi removida.

O motivo para remover esses recursos é tornar os projetos da API mais simples, estáveis ​​e com maior desempenho. Por exemplo, muitas vezes é necessário filtrar alguns campos antes de registrar uma mensagem, como a remoção de informações confidenciais. Isso não seria possível se os campos fossem obrigatórios.

Consulte Buffers de protocolo para mais informações.