DEV Community

Danilo O. Pinheiro, dopme.io
Danilo O. Pinheiro, dopme.io

Posted on

Comunicação Rápida e Tipada com gRPC no .NET

Em arquiteturas modernas, especialmente com microserviços e comunicação entre sistemas distribuídos, o uso de APIs REST pode não ser o mais eficiente. É aí que entra o gRPC — um framework de RPC de alto desempenho e baixo consumo baseado em Protobuf, amplamente adotado por empresas como Google, Netflix e outros.

Neste artigo, vamos aprender como implementar gRPC com .NET 8, explorando desde conceitos até exemplos práticos e cases de uso reais.


🚀 O que é gRPC?

gRPC (Google Remote Procedure Call) é um framework de comunicação remota que utiliza o Protocol Buffers (Protobuf) como mecanismo de serialização. Ele oferece:

  • Comunicação binária (mais rápida que JSON)
  • Contrato fortemente tipado
  • Suporte a comunicação bidirecional e streaming
  • Compatibilidade com várias linguagens

🧰 Tecnologias Utilizadas

  • .NET 8 (SDK)
  • gRPC (via Grpc.AspNetCore)
  • Protocol Buffers (v3)
  • Docker (opcional)
  • REST Gateway (opcional)

📦 Criando um Projeto gRPC com .NET 8

dotnet new grpc -n GrpcDemo cd GrpcDemo 
Enter fullscreen mode Exit fullscreen mode

Estrutura criada:

GrpcDemo/ ├── Protos/greeter.proto ├── Services/GreeterService.cs ├── Program.cs └── Startup.cs (se for .NET 6-) 
Enter fullscreen mode Exit fullscreen mode

✍️ Exemplo de contrato .proto

syntax = "proto3"; option csharp_namespace = "GrpcDemo"; service ProductService { rpc GetProduct (ProductRequest) returns (ProductReply); } message ProductRequest { int32 id = 1; } message ProductReply { int32 id = 1; string name = 2; double price = 3; } 
Enter fullscreen mode Exit fullscreen mode

🔧 Implementação do Serviço

public class ProductService : ProductService.ProductServiceBase { public override Task<ProductReply> GetProduct(ProductRequest request, ServerCallContext context) { var product = new ProductReply { Id = request.Id, Name = "Produto Exemplo", Price = 99.90 }; return Task.FromResult(product); } } 
Enter fullscreen mode Exit fullscreen mode

Registre no Program.cs:

app.MapGrpcService<ProductService>(); 
Enter fullscreen mode Exit fullscreen mode

🔗 Chamando gRPC via Client .NET

Crie um app console separado:

dotnet new console -n GrpcClientDemo cd GrpcClientDemo dotnet add package Grpc.Net.Client dotnet add package Google.Protobuf dotnet add package Grpc.Tools 
Enter fullscreen mode Exit fullscreen mode

Edite o .csproj para incluir o .proto:

<ItemGroup> <Protobuf Include="../GrpcDemo/Protos/greeter.proto" GrpcServices="Client" /> </ItemGroup> 
Enter fullscreen mode Exit fullscreen mode

Código do cliente:

using var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new ProductService.ProductServiceClient(channel); var reply = await client.GetProductAsync(new ProductRequest { Id = 1 }); Console.WriteLine($"Produto: {reply.Name}, Preço: R${reply.Price}"); 
Enter fullscreen mode Exit fullscreen mode

📡 Streaming com gRPC

Você também pode implementar:

  • Server streaming (ex: atualizações de status)
  • Client streaming (ex: upload em partes)
  • Bidirectional streaming (ex: chat)

Exemplo simples de server streaming:

rpc SubscribePrices (PriceRequest) returns (stream PriceReply); 
Enter fullscreen mode Exit fullscreen mode

✅ Vantagens do gRPC

Característica REST gRPC
Performance ⚠️ Alta latência ✅ Alta performance
Tipagem ❌ Fraca ✅ Forte via Protobuf
Streaming ❌ Difícil ✅ Nativo
Ferramentas modernas ✅ Sim ✅ Sim
Compatibilidade com browser ✅ Sim ⚠️ Parcial (usa gRPC-Web)

🔐 Segurança e Produção

  • Ative TLS por padrão (https)
  • Utilize gRPC-Web se precisar de compatibilidade com front-end (ex: Blazor, Angular)
  • Faça versionamento via namespaces e pastas .proto
  • Considere usar Envoy como proxy (se necessário)

🧪 Testes de gRPC

Você pode usar o BloomRPC ou grpcurl para testar seus serviços sem front-end.


🧠 Quando usar gRPC?

✅ Microserviços internos com alta performance
✅ Comunicação entre sistemas distribuídos
✅ Serviços móveis ou IoT com limitação de banda
❌ APIs públicas para consumo por browsers (recomenda-se REST)


📘 Boas práticas

  • Separe contratos .proto em um projeto compartilhado
  • Use MapGrpcReflectionService() em ambientes de desenvolvimento
  • Registre interceptadores para logging, metrics e autenticação
  • Combine com OpenTelemetry para rastreamento distribuído

🤝 Conecte-se Comigo

Tem usado gRPC ou deseja explorar mais sobre APIs performáticas no .NET moderno? Vamos conversar:

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.