Por que seu projeto precisa de um API Gateway em JavaScript?
\n\nImagine 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\nNo 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\nEste 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\nO que é um API Gateway e para que serve?
\n\nAPI 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
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\nProjetando a estrutura do API Gateway em Node.js
\n\nAntes 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
O cliente (frontend) acessa apenas o Gateway na porta 8080. O Gateway decide para onde direcionar a requisição.
\n\nPasso 1. Configuração básica do Express
\n\nVamos criar um novo projeto e instalar as dependências:
\nmkdir api-gateway\ncd api-gateway\nnpm init -y\nnpm install express http-proxy-middleware dotenv\n\nAgora 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\nPronto! 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.
Adicionando autenticação e verificação de tokens
\n\nUma 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\nVamos adicionar um middleware para verificar o token:
\n// middleware/auth.js\nconst jwt = require('jsonwebtoken');\n\nconst authMiddleware = (req, res, next) =>