gRPC es un marco de trabajo de comunicación remota altamente eficiente y escalable que se utiliza para implementar servicios API, se basa en el protocolo de transmisión de mensajes Protocol Buffers y utiliza la serialización binaria en lugar de la serialización de texto tradicional para mejorar la velocidad y la eficiencia de la transmisión de datos.
Permite a los desarrolladores crear servicios de forma fácil y eficiente y brinda una amplia gama de funciones, como autenticación, detección de errores, gestión de la congestión y más. Además, es compatible con múltiples lenguajes de programación, lo que permite a los desarrolladores crear servicios unificados en una amplia variedad de plataformas.
Principales ventajas
- Velocidad y eficiencia: gRPC utiliza Protocol Buffers para serializar y transmitir datos, lo que es más rápido y eficiente en términos de ancho de banda y recursos que otros formatos de serialización como JSON o XML.
- Interoperabilidad: gRPC es compatible con múltiples lenguajes de programación, incluidos Go, Java, Python, Ruby y otros, lo que permite a los desarrolladores crear servicios unificados en una amplia variedad de plataformas.
- Facilidad de uso: gRPC ofrece una interfaz de programación de aplicaciones (API) fácil de usar para crear servicios y realizar llamadas remotas, lo que simplifica el desarrollo y la mantenimiento de servicios API.
- Soporte para stream: gRPC ofrece un soporte nativo para stream de datos, lo que permite a los desarrolladores crear servicios que procesen grandes cantidades de datos en tiempo real.
- Seguridad: gRPC ofrece una amplia gama de características de seguridad, como la autenticación, la cifrado de datos y más, que pueden proteger los servicios API y los datos sensibles.
Fuente: https://grpc.io/
Ejemplo de código de un servicio en Go:
Definir el esquema de la solicitud y la respuesta en Protocol Buffers:
syntax = "proto3";
service GreetService {
rpc Greet(GreetRequest) returns (GreetResponse) {}
}
message GreetRequest {
string name = 1;
}
message GreetResponse {
string message = 1;
}
Generar código de servidor y cliente en Go a partir del esquema de Protocol Buffers
protoc --go_out=plugins=grpc:. greet.proto
Implementar el servidor gRPC
package main
import (
"context"
"log"
"net"
"google.golang.org/grpc"
)
type server struct{}
func (s *server) Greet(ctx context.Context, req *GreetRequest) (*GreetResponse, error) {
return &GreetResponse{Message: "Hello " + req.Name}, nil
}
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
s := grpc.NewServer()
RegisterGreetServiceServer(s, &server{})
if err := s.Serve(lis); err != nil {
log.Fatalf("Failed to serve: %v", err)
}
}
Implementar el cliente gRPC
package main
import (
"context"
"log"
"google.golang.org/grpc"
)
func main() {
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
if err != nil {
log.Fatalf("Could not connect: %v", err)
}
defer conn.Close()
client := NewGreetServiceClient(conn)
req := &GreetRequest{Name: "John Doe"}
res, err := client.Greet(context.Background(), req)
if err != nil {
log.Fatalf("Error while calling Greet: %v", err)
}
log.Printf("Response from Greet: %s", res.Message)
}