API Gateway para microsserviços em JavaScript: guia completo

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

Por que seu projeto precisa de um API Gateway em JavaScript?

\n\n

Imagine que seu backend é um enorme shopping center. Dentro dele, dezenas de lojas (microsserviços): uma vende livros, outra roupas, uma terceira eletrônicos. Cada loja tem sua própria entrada, suas próprias regras e sua própria língua. Agora imagine que o visitante (aplicação cliente) precisa percorrer todas essas entradas para comprar uma única camiseta. Caos, certo?

\n\n

No mundo do desenvolvimento web, esse problema é resolvido pelo API Gateway — um ponto de entrada único para todos os microsserviços. Ele é como o administrador do shopping: direciona requisições, verifica ingressos (tokens), coleta dados de diferentes lojas e entrega a resposta pronta ao cliente. E hoje vamos analisar como escrever esse gateway em JavaScript puro usando Node.js.

\n\n

Este artigo será útil tanto para iniciantes que estão conhecendo a arquitetura de microsserviços, quanto para desenvolvedores experientes que desejam ver exemplos práticos de código. Vamos lá!

\n\n

O que é um API Gateway e para que serve?

\n\n

API Gateway é um componente servidor que atua como uma camada intermediária entre o cliente e os serviços internos. Ele assume:

\n
    \n
  • Roteamento — direciona requisições para o microsserviço correto.
  • \n
  • Autenticação e autorização — verifica se o usuário tem permissão de acesso.
  • \n
  • Agregação de dados — coleta respostas de vários serviços em uma única.
  • \n
  • Limitação de requisições — protege o backend contra sobrecargas.
  • \n
  • Transformação de protocolos — por exemplo, converte REST em GraphQL.
  • \n
\n\n

Para serviços JavaScript (especialmente em Node.js), o API Gateway é uma escolha natural. Ele é facilmente escrito em Express, Koa ou Fastify e, principalmente, permite manter um estilo de código uniforme em todo o projeto.

\n\n

Projetando a estrutura do API Gateway em Node.js

\n\n

Antes de escrever código, vamos definir a arquitetura. Suponha que temos três microsserviços:

\n
    \n
  • users-service — gerenciamento de usuários (porta 3001).
  • \n
  • orders-service — pedidos (porta 3002).
  • \n
  • products-service — catálogo de produtos (porta 3003).
  • \n
\n\n

O cliente (frontend) acessa apenas o Gateway na porta 8080. O Gateway decide para onde direcionar a requisição.

\n\n

Passo 1. Configuração básica do Express

\n\n

Vamos criar um novo projeto e instalar as dependências:

\n
mkdir api-gateway\ncd api-gateway\nnpm init -y\nnpm install express http-proxy-middleware dotenv
\n\n

Agora vamos escrever um Gateway simples que faz proxy das requisições para os serviços:

\n
// gateway.js\nconst express = require('express');\nconst { createProxyMiddleware } = require('http-proxy-middleware');\nrequire('dotenv').config();\n\nconst app = express();\nconst PORT = process.env.PORT || 8080;\n\n// Rotas para os microsserviços\napp.use('/users', createProxyMiddleware({\n  target: 'http://localhost:3001',\n  changeOrigin: true,\n}));\n\napp.use('/orders', createProxyMiddleware({\n  target: 'http://localhost:3002',\n  changeOrigin: true,\n}));\n\napp.use('/products', createProxyMiddleware({\n  target: 'http://localhost:3003',\n  changeOrigin: true,\n}));\n\napp.listen(PORT, () => {\n  console.log(`API Gateway iniciado na porta ${PORT}`);\n});
\n\n

Pronto! Agora qualquer requisição para /users é automaticamente redirecionada para o users-service. Mas isso é só o começo. Um Gateway de verdade deve fazer mais.

\n\n

Adicionando autenticação e verificação de tokens

\n\n

Uma das principais funções do API Gateway é a autenticação centralizada. Em vez de verificar o JWT em cada microsserviço, fazemos isso uma única vez no gateway.

\n\n

Vamos adicionar um middleware para verificar o token:

\n
// middleware/auth.js\nconst jwt = require('jsonwebtoken');\n\nconst authMiddleware = (req, res, next) =>                

Blogs

Book Recommendations