Definição de um serviço gRPC com Buffers de Protocolo

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.

Definição de um serviço gRPC com Buffers de Protocolo

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:



Learning HTTP/2: A Practical Guide for Beginners

Stephen Ludin


The Design of Web APIs

Arnaud Lauret