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.
- A presença de um campo de mensagem ainda está disponível, o que pode ser testado
usando o método
- 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.
- Uma exceção especial é concedida para
- 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.