gRPC utiliza protocol buffers como IDL para definir la interfaz de servicio. Protocol buffers en un mecanismo extensible, independiente del lenguaje y neutral de la plataforma para serializar datos estructurados se pueden considerar como un mecanismo de serialización de datos . La definición de la interfaz de servicio se especifica en un archivo .proto: un archivo de texto normal con una extensión .proto. Los servicios gRPC se definen en formato Protocol buffers normal, con parámetros de método RPC y tipos de retorno especificados como mensajes de Protocol buffers. Dado que la definición del servicio es una extensión de la especificación de Protocol buffers, se utiliza un complemento gRPC especial para generar código a partir de su archivo proto.
En nuestro caso de uso de ejemplo, la interfaz del servicio ProductInfo se puede definir utilizando Protocol buffers como se muestra en el siguiente ejemplo:
syntax = "proto3";
package ecommerce;
service ProductInfo {
rpc addProduct(Product) returns (ProductID);
rpc getProduct(ProductID) returns (Product);
}
message Product {
string id = 1;
string name = 2;
string description = 3;
}
message ProductID {
string value = 1;
}
La definición de servicio de ProductInfo se compone de una definición de interfaz de servicio donde especificamos los métodos remotos, sus parámetros de entrada y salida, y la definición de tipo (o formatos de mensaje) de esos parámetros.