API Gateway em Go: seu maestro pessoal para microsserviços

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

Introdução: por que seu projeto Go precisa de um maestro

\n\n

Imagine uma orquestra sinfônica. Você tem violinos (serviço de usuários), sopros (serviço de pedidos) e percussão (serviço de pagamentos). Cada instrumento é lindo por si só, mas sem um maestro, eles tocam cada um por si. No mundo dos microsserviços em Go, o API Gateway é exatamente esse maestro.

\n\n

Quando você programa em Go, está acostumado com desempenho, simplicidade e elegância. Mas, assim que o número de serviços passa de 3 ou 4, o caos se instala: os clientes não sabem onde bater, a autenticação é duplicada em cada serviço e o monitoramento vira uma dor de cabeça. O API Gateway para serviços Go resolve todos esses problemas de uma só vez.

\n\n

Neste artigo, não vamos apenas falar de teoria. Vamos usar Go, a biblioteca padrão e alguns pacotes populares para montar nosso próprio gateway. Pronto para reger? Vamos nessa!

\n\n

O que é um API Gateway e por que você precisa de um em Go?

\n\n

O API Gateway é um ponto de entrada único para todas as requisições dos clientes aos seus serviços de backend. Imagine que você tem:

\n\n
    \n
  • user-service:8081 — registro e perfis
  • \n
  • order-service:8082 — carrinho e pedidos
  • \n
  • payment-service:8083 — transações
  • \n
\n\n

Sem um gateway, o cliente precisa saber os endereços de todos os três serviços. Com um API Gateway em Go, ele bate apenas em api.exemplo.com, e o gateway decide para onde encaminhar a requisição.

\n\n

Funções principais do gateway

\n\n
    \n
  • Roteamento — redirecionar requisições para o serviço correto
  • \n
  • Autenticação e autorização — verificar tokens JWT em um único lugar
  • \n
  • Rate Limiting — proteção contra DDoS e sobrecargas
  • \n
  • Agregação de dados — combinar respostas de vários serviços em uma só
  • \n
  • Balanceamento de carga — distribuir requisições entre instâncias
  • \n
\n\n

Go é ideal para esse papel: é leve, rápido e permite processar milhares de requisições por segundo em um único núcleo.

\n\n

Criando um API Gateway simples em Go: da ideia ao código

\n\n

Vamos construir um API Gateway Go mínimo, mas funcional. Usaremos apenas a biblioteca padrão net/http e o pacote httputil.ReverseProxy para fazer o proxy.

\n\n

Passo 1: Roteamento básico

\n\n

Vamos começar de forma simples: direcionar requisições para diferentes serviços com base no caminho.

\n\n
package main\n\nimport (\n    "log"\n    "net/http"\n    "net/http/httputil"\n    "net/url"\n)\n\nfunc main() {\n    // Serviço de usuários\n    userServiceURL, _ := url.Parse("http://localhost:8081")\n    userProxy := httputil.NewSingleHostReverseProxy(userServiceURL)\n\n    // Serviço de pedidos\n    orderServiceURL, _ := url.Parse("http://localhost:8082")\n    orderProxy := httputil.NewSingleHostReverseProxy(orderServiceURL)\n\n    http.HandleFunc("/api/users/", func(w http.ResponseWriter, r *http.Request) {\n        log.Printf("Redirecionando requisição para user-service: %s", r.URL.Path)\n        userProxy.ServeHTTP(w, r)\n    })\n\n    http.HandleFunc("/api/orders/", func(w http.ResponseWriter, r *http.Request) {\n        log.Printf("Redirecionando requisição para order-service: %s", r.URL.Path)\n        orderProxy.ServeHTTP(w, r)\n    })\n\n    log.Println("API Gateway rodando na porta :8080")\n    log.Fatal(http.ListenAndServe(":8080", nil))\n}\n
\n\n

Esse código já faz 80% do trabalho: qualquer requisição para /api/users/ vai para o user-service, e para /api/orders/ vai para o order-service. Mas cadê a autenticação?

\n\n

Passo 2: Adicionando middleware para JWT

\n\n

A verdadeira mágica do API Gateway em Go acontece no middleware. Vamos adicionar a verificação do token JWT antes do proxy.

\n\n
package main\n\nimport (\n    "context"\n    "log"\n    "net/http"\n    "net/http/htt                

Blogs

Book Recommendations