Que Es gRPC?

gRPC (Google Remote Procedure Call) es un framework RPC de alto rendimiento. Usa HTTP/2 para transporte, Protocol Buffers para serializacion y provee streaming bidireccional, control de flujo y autenticacion integrada.

gRPC vs. REST

CaracteristicaRESTgRPC
ProtocoloHTTP/1.1 o HTTP/2Solo HTTP/2
FormatoJSON (texto)Protobuf (binario)
ContratoOpcional (OpenAPI)Requerido (.proto)
StreamingLimitado (WebSocket)Integrado (4 patrones)
Generacion de codigoOpcionalIntegrada
PerformanceBuenaExcelente (2-10x mas rapido)
Caso de usoAPIs publicas, webMicroservicios, movil

Protocol Buffers

Los archivos .proto definen el contrato de la API:

syntax = "proto3";
package user;

service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc ListUsers (ListUsersRequest) returns (ListUsersResponse);
  rpc CreateUser (CreateUserRequest) returns (User);
  rpc StreamUpdates (StreamRequest) returns (stream UserUpdate);
}

message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
  Role role = 4;
}

enum Role {
  UNKNOWN = 0;
  ADMIN = 1;
  USER = 2;
}

Conceptos Clave de Protobuf

  • Numeros de campo se usan en formato binario — nunca cambiarlos
  • Valores por defecto — strings vacios, cero, false (sin concepto de null)
  • Compatibilidad hacia atras — agregar campos nuevos con numeros nuevos

Patrones de Comunicacion gRPC

Unary RPC: Un request, un response

Server Streaming: Un request, stream de responses

Client Streaming: Stream de requests, un response

Bidirectional Streaming: Ambos transmiten simultaneamente

Testing de Servicios gRPC

Usando grpcurl

# Listar servicios
grpcurl -plaintext localhost:50051 list

# Llamar un metodo
grpcurl -plaintext -d '{"id": 42}' \
  localhost:50051 user.UserService/GetUser

# Con metadata (headers)
grpcurl -plaintext \
  -H "Authorization: Bearer token123" \
  -d '{"name": "Alice", "email": "alice@example.com"}' \
  localhost:50051 user.UserService/CreateUser

Usando Postman

Postman soporta testing gRPC desde 2022: crear request gRPC, importar .proto, seleccionar metodo e invocar.

Codigos de Estado gRPC

Codigo gRPCEquivalente HTTPSignificado
OK (0)200Exito
INVALID_ARGUMENT (3)400Request invalido
NOT_FOUND (5)404No encontrado
ALREADY_EXISTS (6)409Conflicto
PERMISSION_DENIED (7)403Prohibido
UNAUTHENTICATED (16)401No autenticado
INTERNAL (13)500Error del servidor

Tests de Streaming

TestQue Verificar
Cancelacion de streamCliente puede cancelar a mitad
Stream vacioServidor retorna cero mensajes graciosamente
Stream grandePerformance con miles de mensajes
Error a mitad de streamManejo correcto en ambos lados
Timeout en streamDEADLINE_EXCEEDED despues del timeout

Ejercicio Practico

  1. Configura grpcurl y explora un servicio gRPC.
  2. Testea todos los patrones: unary, server streaming y escenarios de error.
  3. Compara con REST: Llama la misma operacion via gRPC y REST. Compara tamano y tiempo.
  4. Testing de errores: Envia mensajes protobuf invalidos, campos faltantes y valores enum invalidos.

Puntos Clave

  • gRPC usa HTTP/2 y Protocol Buffers para comunicacion de alto rendimiento entre microservicios
  • Los archivos proto definen el contrato estricto de la API
  • Cuatro patrones de comunicacion: unary, server streaming, client streaming y bidireccional
  • gRPC tiene sus propios codigos de estado distintos de los codigos HTTP
  • grpcurl es la herramienta esencial de linea de comandos, equivalente a cURL para REST