Home » BR » Blog » Definição de um serviço gRPC com Buffers de Protocolo
* Este posto é o terceiro da série sobre gRPC
O primeiro passo na construção de um serviço gRPC é criar a definição da interface de serviço com os métodos que são expostos por esse serviço junto com os parâmetros de entrada e os tipos de retorno.
O gRPC usa buffers de protocolo (protocol buffers ou protobufs) como IDLs para definir a interface de serviço. Os buffers de protocolo são um mecanismo extensível, independente de idioma e plataforma para a serialização de dados estruturados. A definição da interface de serviço é especificada em um arquivo protótipo, que nada mais é do que um arquivo de texto simples com uma extensão .proto. Os serviços gRPC são definidos em um formato de buffer de protocolo comum, com os parâmetros do método RPC e tipos de retorno especificados como mensagens de buffer de protocolo. Como a definição do serviço é uma extensão da especificação do buffer de protocolo, um plug-in gRPC especial é usado para gerar código a partir de seu arquivo .proto.
❝ Um arquivo protótipo, que nada mais é do que um arquivo de texto simples com uma extensão .proto, é usado para gerar código a partir do arquivo protótipo. ❞
No exemplo, a interface do serviço DrinkInfo, chamado DrinkService, é definida usando o protobuf, como mostrado no seguinte trecho. O DrinkService consiste em uma definição da interface de serviço na qual especificamos os métodos remotos (addCreate e Get), seus parâmetros de entrada e saída e a definição do tipo (ou formatos de mensagem) desses parâmetros.
syntax = "proto3"; message DrinkMessage { string id = 1; string name = 2; string desc = 3; } message DrinkMessages { repeated DrinkMessage drinks = 1; } message Empty {} service DrinkService { rpc addCreate (DrinkMessage) returns (DrinkMessage); rpc Get (Empty) returns (DrinkMessages); }
No exemplo, a interface do serviço DrinkInfo, chamado DrinkService, é definida usando o protobuf, como mostrado no seguinte trecho. O DrinkService consiste em uma definição da interface de serviço na qual especificamos os métodos remotos (addCreate e Get), seus parâmetros de entrada e saída e a definição do tipo (ou formatos de mensagem) desses parâmetros.
Os parâmetros de entrada e retorno podem ser um tipo definido pelo usuário (por exemplo, tipos DrinkMessage e DrinkMessages) ou um tipo de dados padrão, como string. Estes tipos são estruturados como mensagens, onde cada mensagem é um pequeno registro lógico de informações contendo uma série de pares de nomes e valores. Estes campos são pares nome-valor com números de campos únicos (por exemplo, string id = 1) que são usados para identificar seus campos no formato binário da mensagem.
Esta definição de serviço é usada para construir o lado servidor e cliente de uma aplicação gRPC. No próximo post, darei mais detalhes sobre a implementação do servidor gRPC.
Gostaria de aproveitar esta oportunidade para recomendar alguns livros que podem ser de seu interesse: