gRPC en C#: más potente que REST, pero no siempre

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

gRPC en C#: cuando REST es cosa del pasado y HTTP/1.1 es un lastre

\n\n

Imagina que eres un piloto de Fórmula 1. Tu monoplaza es capaz de acelerar hasta 380 km/h, pero circulas por atascos urbanos. No tiene sentido, ¿verdad? Pues así se usa a menudo gRPC en C# —una herramienta potentísima para la comunicación entre servicios— en situaciones donde bastaría con una API REST normal. Y luego se sorprenden: «¿por qué es tan difícil de depurar, por qué tanto código?».

\n\n

Aclaremos cuándo usar gRPC está realmente justificado y cuándo es mejor quedarse con el probado HTTP/1.1. Spoiler: gRPC no es una bala de plata. Es un acelerador de cohete para las tareas adecuadas.

\n\n

¿Qué es gRPC y por qué C# es el terreno ideal?

\n\n

gRPC (Google Remote Procedure Call) es un framework para llamadas a procedimientos remotos, construido sobre HTTP/2 y Protocol Buffers. En lugar del voluminoso JSON, un formato binario compacto. En lugar de una única solicitud-respuesta, streams completos, multiplexación y comunicación bidireccional.

\n\n

¿Por qué C# gRPC es una bomba? Porque .NET Core se diseñó desde el principio para microservicios de alta carga. Asincronía, Span<T>, bajo nivel de asignaciones: todo esto convierte la combinación C# + gRPC en una de las más eficientes de la industria.

\n\n
// Ejemplo de un archivo .proto simple\nsyntax = "proto3";\n\nservice OrderService {\n  rpc GetOrder (OrderRequest) returns (OrderResponse);\n  rpc SubscribeOrders (OrderFilter) returns (stream OrderUpdate);\n}\n\nmessage OrderRequest {\n  string order_id = 1;\n}\n\nmessage OrderResponse {\n  string id = 1;\n  double total = 2;\n  repeated string items = 3;\n}
\n\n

Tras generar el código con protoc o el paquete Grpc.Tools, obtendrás una clase completa de C# que puedes usar como un método normal.

\n\n

¿Cuándo se necesita realmente gRPC en C#? 5 escenarios de hormigón armado

\n\n

1. Microservicios con alta carga (1000+ rps)

\n\n

Si tu sistema procesa miles de solicitudes por segundo, cada kilobyte extra en JSON y cada RTT (round-trip time) adicional se convierten en pérdida de dinero. gRPC en C# ofrece una ganancia de velocidad de hasta 7-10 veces en comparación con REST/JSON gracias a:

\n\n
    \n
  • Serialización binaria (Protobuf es de 3 a 5 veces más compacto que JSON)
  • \n
  • Multiplexación HTTP/2 (un solo canal TCP para múltiples solicitudes)
  • \n
  • Ausencia de sobrecarga en el análisis de cabeceras
  • \n
\n\n

2. Streaming de datos en tiempo real

\n\n

¿Necesitas transmitir cotizaciones de acciones, registros, telemetría de sensores IoT o actualizaciones de UI? Streaming gRPC C# es tu opción. Se admiten cuatro tipos de streams:

\n\n
    \n
  • Unary — solicitud-respuesta clásica
  • \n
  • Server streaming — el servidor envía datos al cliente
  • \n
  • Client streaming — el cliente envía un lote de datos al servidor
  • \n
  • Bidirectional streaming — intercambio bidireccional continuo
  • \n
\n\n
// Parte del servidor de bidirectional streaming\npublic override async Task SubscribeOrders(\n    IAsyncStreamReader<OrderFilter> requestStream,\n    IServerStreamWriter<OrderUpdate> responseStream,\n    ServerCallContext context)\n{\n    await foreach (var filter in requestStream.ReadAllAsync())\n    {\n        var update = new OrderUpdate \n        { \n            OrderId = filter.OrderId, \n            Status = "Shipped" \n        };\n        await responseStream.WriteAsync(update);\n    }\n}
\n\n

3. Microservicios internos de un mismo equipo

\n\n

gRPC no es adecuado para APIs públicas (soporte débil en navegadores, depuración compleja). Pero dentro de un clúster, es el transporte ideal. Si controlas tanto el cliente como el servidor, gRPC en C# proporciona:

\n
    \n
  • Tipado estricto mediante contratos .proto
  • \n
  • Generación automática de clientes
  • \n
  • Soporte para graceful shutdown y propagación de deadlines

Blogs

Book Recommendations