Es un framework open source que hace uso de RPC (Remote Procedure Call) fue desarrollado por Google, en Marzo de 2015 decide hacerlo de código abierto.
Netflix, Cisco, Jupiter Networks, CoreOS entre otras empresas usan gRPC para la comunicación de sistemas y servicios
Una aplicación (cliente) puede llamar directamente un método que se encuentra en un servidor diferente ya sea en la misma maquina o en otra maquina diferente.
En el servidor de gRPC se implementa una interfaz que permite que cualquier cliente sin importa el lenguaje envíe y reciba mensajes (datos)
gRPC usa por defecto Protocol Buffers (profobuffer) para su comunicación, los Protobuffers son un mecanismo para serializar los datos similar a como funciona un serializer en DRF
Algunas de las ventajas que tienen los Protobuffers son:
gRPC usa el concepto de definición de servicios, estos servicios son métodos que pueden ser llamados de forma remota pasando ciertos parámetros y retornar una respuesta.
Unary -> El cliente envía un mensaje al server y recibe una respuesta.
Server Stream -> El cliente envía un mensaje al server y el server retorna un stream de mensajes.
Client Stream -> El cliente envía un stream de mensajes al
server y el server retorna un mensaje.
Bidirectional Stream -> Tanto cliente como servidor envían streams
rpc Sayhello(HelloRequest) returns (HelloResponse)
rpc Sayhello(HelloRequest) returns (stream HelloResponse)
rpc Sayhello(stream HelloRequest) returns (HelloResponse)
rpc Sayhello(stream HelloRequest) returns (stream HelloResponse)
gRPC | Rest | |
---|---|---|
Formato | Profobuffer (binary code) | Json |
Protocolo | HTTP/2 | HTTP/1.1 |
Peticiones | Unary Client Stream Server Stream Bidirectional Stream |
Request / Response |
Los profobuffer son los archivos que se usan para definir los servicios (métodos) que se van a usar, cual va a ser el mensaje que reciben y cual el mensaje que responden.
Dentro de las ventajas que encontramos al usar protobuffers podemos mencionar.
- Fuertemente tipados
- Los datos son convertidos a bytestrings reduciendo el tamaño del mensaje
Los archivos protobuffer tiene la extensión .proto
syntax = "proto2";
// Definición del servicio
service Greeter {
// Definición del método con el mensaje que espera
// y el mensaje que retorna
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// Definición de mensajes
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Los atributos de los mensajes están definidos así:
<tipo de dato> <nombre del atributo> = <id de atributo>;
Los id de los atributos deben ser únicos.
Si un atributo es eliminado no se debe usar su indice para evitar problema de compatibilidad.
Todos los atributos tienen un valor por defecto dependiendo del tipo de dato.