Home > Blog > Desenvolvimento Web
Desenvolvimento Web
JavaScript
Programação

API Gateway no Node.js: roteamento e segurança

Atualizado em: 18 de outubro de 2026

Rack de servidores processando fluxos de dados no Node.js

API Gateway no Node.js é uma camada de entrada que centraliza roteamento, autenticação, limites, observabilidade e políticas comuns antes que a requisição alcance serviços internos. Em arquiteturas com vários backends, o gateway reduz duplicação e oferece um ponto consistente para clientes web, mobile e integrações.

O gateway não deve concentrar toda a lógica de negócio. Seu papel principal é proteger e organizar a borda do sistema: validar identidade, escolher o destino, aplicar políticas e devolver uma resposta previsível.

Quando usar um API Gateway

  • vários serviços atendem o mesmo produto;
  • clientes precisam de uma URL única;
  • autenticação e rate limiting devem ser centralizados;
  • é necessário versionar rotas e migrar serviços gradualmente;
  • métricas e logs precisam de contexto comum.

Gateway mínimo com Node.js

import http from 'node:http';
import { request } from 'undici';

const routes = {
  '/users': 'http://users:3001',
  '/orders': 'http://orders:3002'
};

const server = http.createServer(async (req, res) => {
  const prefix = Object.keys(routes).find((key) => req.url.startsWith(key));
  if (!prefix) {
    res.writeHead(404).end('Not found');
    return;
  }

  const target = routes[prefix];
  const response = await request(`${target}${req.url}`, {
    method: req.method,
    headers: req.headers,
    body: ['GET', 'HEAD'].includes(req.method) ? undefined : req
  });

  res.writeHead(response.statusCode, response.headers);
  response.body.pipe(res);
});

server.listen(8080);

Esse exemplo mostra apenas o fluxo básico. Em produção, adicione timeouts, cancelamento, limites de corpo, retries seletivos e proteção contra destinos arbitrários. Veja Undici no Node.js e Retry com Backoff no Node.js.

Roteamento explícito

Mantenha uma tabela controlada de destinos. Nunca aceite uma URL de backend enviada pelo cliente, pois isso transforma o gateway em vetor de SSRF. Rotas podem ser definidas por prefixo, host, versão ou cabeçalho interno validado.

Autenticação e autorização

O gateway pode validar assinatura de JWT, expiração, issuer e audience. Depois, encaminha apenas claims necessárias em headers internos assinados ou em contexto de rede confiável. A autorização de negócio, como “pode cancelar este pedido?”, continua no serviço responsável.

Consulte JWT no Node.js, RBAC no Node.js e ABAC no Node.js.

Timeouts e cancelamento

Defina um prazo total para a requisição e distribua o orçamento entre as chamadas internas. Um gateway sem timeout pode acumular conexões e amplificar uma falha downstream.

const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 2_000);

try {
  const response = await fetch(url, { signal: controller.signal });
  return response;
} finally {
  clearTimeout(timer);
}

Rate limiting

Aplique limites por tenant, usuário, API key e rota. Retorne 429 Too Many Requests com Retry-After quando apropriado. Para ambientes distribuídos, o contador precisa de armazenamento compartilhado ou algoritmo compatível com múltiplas instâncias.

Transformação de respostas

Transformações simples podem adaptar nomes de headers ou remover campos internos. Evite converter grandes payloads inteiros na memória. Prefira streaming e mantenha contratos claros para não criar acoplamento oculto.

Agregação de APIs

Um gateway pode combinar respostas de dois serviços, mas isso aumenta latência e dependências. Execute chamadas independentes em paralelo, imponha timeout individual e defina comportamento quando uma fonte falhar.

const [profile, plan] = await Promise.allSettled([
  fetchProfile(userId),
  fetchPlan(userId)
]);

Headers importantes

  • traceparent para rastreamento distribuído;
  • x-request-id ou identificador equivalente;
  • forwarded ou x-forwarded-* somente de proxies confiáveis;
  • remoção de headers hop-by-hop;
  • limites para quantidade e tamanho de headers.

Retries seguros

Não repita qualquer requisição automaticamente. GET e operações idempotentes são candidatas melhores. Para POST, use Idempotency Keys quando o domínio permitir. Retries devem respeitar deadline, jitter e respostas como Retry-After.

Circuit breaker e bulkhead

Um circuit breaker evita insistir em um serviço indisponível. Bulkheads separam recursos por destino para impedir que um backend lento consuma toda a capacidade do gateway. Consulte Circuit Breaker no Node.js.

Observabilidade

Registre método, rota normalizada, status, duração, serviço de destino, tentativas e erro. Não use URL completa como label de métrica, pois IDs geram cardinalidade alta. Propague contexto de trace e associe logs ao mesmo identificador.

Segurança operacional

  • limite tamanho de body e tempo de upload;
  • valide Content-Type;
  • remova headers internos vindos da internet;
  • use TLS entre componentes quando necessário;
  • mantenha allowlist de destinos;
  • não exponha mensagens internas de erro;
  • proteja endpoints administrativos.

Graceful shutdown

Ao receber sinal de encerramento, pare de aceitar novas conexões, aguarde requisições em andamento dentro de um prazo e feche pools. Isso evita respostas interrompidas durante deploys.

Erros comuns

  • colocar regra de negócio no gateway;
  • não definir timeout;
  • confiar em headers enviados pelo cliente;
  • repetir POST sem idempotência;
  • carregar respostas grandes em memória;
  • usar uma única fila de conexões para todos os serviços;
  • registrar tokens e dados sensíveis.

Conclusão

API Gateway no Node.js organiza a borda de sistemas distribuídos e aplica políticas comuns sem duplicação. O desenho mais seguro mantém roteamento explícito, timeouts curtos, autenticação consistente, observabilidade e isolamento por serviço.

Comece pequeno, meça a necessidade de agregação e evite transformar o gateway em um monólito oculto. Consulte a documentação HTTP do Node.js e a documentação oficial do Undici.

10 melhores cursos de programação em 2026

Descubra os melhores cursos de programação. Aprenda a escolher o curso ideal para iniciar ou avançar na carreira de desenvolvedor

POSTS RELACIONADOS

Ver todos

Seta para a direita