Como en muchos sistemas RPC, gRPC se basa en la idea de definir un servicio, especificando los métodos que se pueden llamar de forma remota con sus parámetros y tipos de devolución.
A partir de una definición de servicio en un archivo .proto, gRPC proporciona complementos de compilación que generan código del lado del cliente y del servidor.
Unary RPC. Es el tipo más simple de RPC donde el cliente envía una sola solicitud y obtiene una sola respuesta.
service HelloService {
/* Unary **RPCs**
*[<https://grpc.io/docs/what-is-grpc/core-concepts/>](<https://grpc.io/docs/what-is-grpc/core-concepts/>)
*/
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
}
Las llamadas RPC sincrónicas que se bloquean hasta que llega una respuesta del servidor son la aproximación más cercana a la abstracción de una llamada de procedimiento a la que aspira RPC. Por otro lado, las redes son inherentemente asincrónicas y en muchos escenarios es útil poder iniciar RPC sin bloquear el subproceso actual. La API de programación de gRPC en la mayoría de los lenguajes viene en versiones sincrónicas y asincrónicas.