Definición de un Servicio gRPC con Protocol Buffers

Home » Blog » Definición de un Servicio gRPC con Protocol Buffers


* Este post es el tercero de la serie sobre gRPC


El primer paso para construir un servicio gRPC es crear la definición de la interfaz del servicio con los métodos que son expuestos por ese servicio junto con los parámetros de entrada y los tipos de retorno.

Definición de un Servicio gRPC con Protocol Buffers

gRPC utiliza buffers de protocolo (protocol buffers o protobufs) como IDL para definir la interfaz del servicio. Los protocol buffers son un mecanismo extensible, independiente del lenguaje y de la plataforma, para serializar datos estructurados. La definición de la interfaz de servicio se especifica en un archivo proto, que no es más que un archivo de texto plano con una extensión .proto. Los servicios gRPC se definen en un formato de buffer de protocolo ordinario, con los parámetros de los métodos RPC y los tipos de retorno especificados como mensajes de buffer de protocolo. Dado que la definición del servicio es una extensión de la especificación del buffer de protocolo, se utiliza un plug-in especial de gRPC para generar código a partir de su archivo proto.

Un archivo proto, que no es más que un archivo de texto plano con una extensión .proto

En el ejemplo, la interfaz del servicio DrinkInfo, llamada DrinkService, se define utilizando protobuf como se muestra en el siguiente snippet. El servicio DrinkService se compone de una definición de interfaz de servicio en la que especificamos los métodos remotos(addCreate y Get), sus parámetros de entrada y salida, y la definición del tipo (o formatos de mensaje) de esos 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);
}

Como puedes ver, un servicio es una colección de métodos (por ejemplo, addProduct y getProduct) que pueden ser invocados remotamente. Cada método tiene parámetros de entrada y tipos de retorno que definimos como parte del servicio o que pueden ser importados en la definición del protobuf.

Los parámetros de entrada y de retorno pueden ser un tipo definido por el usuario (por ejemplo, los tipos DrinkMessage y DrinkMessages) o un tipo de datos estándar como string. Estos tipos se estructuran como mensajes, donde cada mensaje es un pequeño registro lógico de información que contiene una serie de pares nombre-valor. Estos campos son pares nombre-valor con números de campo únicos (por ejemplo, string id = 1) que se utilizan para identificar sus campos en el formato binario del mensaje.

Esta definición de servicio se utiliza para construir el lado del servidor y del cliente de una aplicación gRPC. En el siguiente post te daré más detalles de la implementación del servidor gRPC.

Aprovecho para recomendarte algunos libros que te pueden interesar:



Learning HTTP/2: A Practical Guide for Beginners

Stephen Ludin


The Design of Web APIs

Arnaud Lauret