gRPC em Swift: quando e por que isso é realmente necessário

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

gRPC em Swift: quando não é apenas moda, mas necessário

\n\n

Imagine: você está escrevendo um aplicativo iOS para controlar uma casa inteligente. Comandos são enviados a cada segundo, um atraso de 100 ms já é uma catástrofe. Ou você está fazendo um serviço de streaming, onde vídeo, áudio e telemetria voam simultaneamente. REST aqui vai começar a "travar" e ficar de lado. Conheça — gRPC em Swift.

\n\n

Mas sejamos honestos: gRPC não é uma bala de prata. Às vezes, um simples JSON em HTTP/1.1 funciona melhor. Neste artigo, vamos analisar quando o gRPC no iOS é justificado, quando é melhor manter o REST e como isso se parece no código real em Swift.

\n\n

Não vou enrolar. Apenas prática, exemplos e cenários específicos. Vamos lá.

\n\n

O que é gRPC (muito resumidamente, para quem perdeu)

\n\n

gRPC é um framework RPC do Google que usa Protocol Buffers (protobuf) para serialização de dados e HTTP/2 para transporte. Ele suporta:

\n\n
    \n
  • Chamadas unárias (como REST comum)
  • \n
  • Streaming do servidor
  • \n
  • Streaming do cliente
  • \n
  • Streaming bidirecional
  • \n
\n\n

Em Swift, existe a biblioteca oficial grpc-swift (Swift Package Manager), que permite que tanto o cliente quanto o servidor funcionem em Swift. Sim, você pode escrever um servidor em Swift com gRPC — não é brincadeira.

\n\n

Quando o gRPC em Swift é seu melhor amigo

\n\n

1. Alta carga e baixa latência

\n\n

Se seu aplicativo envia centenas de requisições por segundo (por exemplo, trading, jogos, IoT), o gRPC ganha devido a:

\n\n
    \n
  • HTTP/2 — multiplexação, compressão de cabeçalhos
  • \n
  • Protocolo binário — protobuf é analisado mais rápido que JSON
  • \n
  • Conexões keep-alive — não precisa abrir um handshake TCP toda vez
  • \n
\n\n

Exemplo real: aplicativo para monitoramento de servidores. A cada segundo, chegam 1000 métricas. No REST — 1000 conexões TCP, no gRPC — uma conexão de longa duração. A diferença no consumo de bateria é enorme.

\n\n

2. Streaming de dados

\n\n

REST com seu "requisição-resposta" não sabe fazer streaming. Mas o gRPC sabe. Se você precisa:

\n\n
    \n
  • Receber atualizações de taxa de câmbio em tempo real
  • \n
  • Transmitir áudio/vídeo
  • \n
  • Receber logs do servidor à medida que aparecem
  • \n
\n\n

Então o gRPC é sua escolha. Veja como fica o streaming do servidor em Swift:

\n\n
// Definição em .proto\nservice StreamService {\n    rpc SubscribeToUpdates(Empty) returns (stream Update) {}\n}\n\n// Cliente em Swift\nlet client = StreamServiceAsyncClient(channel: channel)\nlet updates = client.subscribeToUpdates(Empty())\n\nfor try await update in updates {\n    print("Atualização recebida: \\(update.message)")\n}
\n\n

Observe: for try await — é Swift Concurrency. O gRPC-Swift funciona muito bem com isso.

\n\n

3. Microsserviços em Swift (sim, isso existe)

\n\n

Você pode escrever todo o backend em Swift (Vapor, Hummingbird) e usar gRPC para comunicação interna entre microsserviços. Vantagens:

\n\n
    \n
  • Código de modelos compartilhado (protobuf gera estruturas Swift)
  • \n
  • Tipagem forte
  • \n
  • Suporte embutido para timeouts, retentativas, balanceamento de carga
  • \n
\n\n
// Servidor em Swift\nfinal class GreeterProvider: GreeterAsyncProvider {\n    func sayHello(request: HelloRequest, context: GRPCAsyncServerCallContext) async throws -> HelloReply {\n        return HelloReply.with { $0.message = "Olá, \\(request.name)!" }\n    }\n}
\n\n

Este código é um servidor gRPC completo que roda em qualquer servidor Linux/macOS.

\n\n

4. Quando você tem um sistema de contrato rigoroso

\n\n

Arquivos Protobuf são a fonte única da verdade. Você descreveu a API em .proto, gerou código para Swift, Go, Python — e todos falam a mesma língua. Sem "ah, mas aqui o campo é opcional, ali não".

\n\n

Para equipes grandes, isso é uma salvação

Blogs

Book Recommendations