API Gateway para microservicios en JavaScript: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué su proyecto necesita un API Gateway en JavaScript?

\n\n

Imagine que su backend es un enorme centro comercial. Dentro hay decenas de tiendas (microservicios): una vende libros, otra ropa, una tercera electrónica. Cada tienda tiene su propia entrada, sus propias reglas y su propio idioma. Ahora imagine que un visitante (la aplicación cliente) debe recorrer todas estas entradas para comprar una sola camiseta. Caos, ¿verdad?

\n\n

En el mundo del desarrollo web, este problema lo resuelve API Gateway: un punto de entrada único para todos los microservicios. Es como el administrador del centro comercial: dirige las solicitudes, verifica los boletos (tokens), recopila datos de diferentes tiendas y entrega una respuesta lista al cliente. Y hoy veremos cómo escribir dicha puerta de enlace en JavaScript puro usando Node.js.

\n\n

Este artículo será útil tanto para principiantes que recién se familiarizan con la arquitectura de microservicios, como para desarrolladores experimentados que desean ver ejemplos de código funcionales. ¡Allá vamos!

\n\n

¿Qué es un API Gateway y para qué sirve?

\n\n

API Gateway es un componente del servidor que actúa como capa intermedia entre el cliente y los servicios internos. Se encarga de:

\n
    \n
  • Enrutamiento — dirige las solicitudes al microservicio correspondiente.
  • \n
  • Autenticación y autorización — verifica si el usuario tiene acceso.
  • \n
  • Agregación de datos — recopila respuestas de varios servicios en una sola.
  • \n
  • Límite de solicitudes — protege el backend de sobrecargas.
  • \n
  • Transformación de protocolos — por ejemplo, convierte REST a GraphQL.
  • \n
\n\n

Para los servicios JavaScript (especialmente en Node.js), API Gateway es una elección natural. Se escribe fácilmente en Express, Koa o Fastify, y lo principal es que permite mantener un estilo de código uniforme en todo el proyecto.

\n\n

Diseñando la estructura del API Gateway en Node.js

\n\n

Antes de escribir código, definamos la arquitectura. Supongamos que tenemos tres microservicios:

\n
    \n
  • users-service — gestión de usuarios (puerto 3001).
  • \n
  • orders-service — pedidos (puerto 3002).
  • \n
  • products-service — catálogo de productos (puerto 3003).
  • \n
\n\n

El cliente (frontend) solo se comunica con el Gateway en el puerto 8080. El Gateway decide hacia dónde dirigir la solicitud.

\n\n

Paso 1. Configuración básica de Express

\n\n

Creemos un nuevo proyecto e instalemos las dependencias:

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

Ahora escribamos un Gateway simple que proxy las solicitudes a los servicios:

\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// Rutas para los microservicios\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 en el puerto ${PORT}`);\n});
\n\n

¡Eso es todo! Ahora cualquier solicitud a /users se redirige automáticamente a users-service. Pero esto es solo el comienzo. Un Gateway real debe hacer más.

\n\n

Añadiendo autenticación y verificación de tokens

\n\n

Una de las principales tareas de API Gateway es la autenticación centralizada. En lugar de verificar el JWT en cada microservicio, lo hacemos una sola vez en la puerta de enlace.

\n\n

Añadamos un middleware para verificar el token:

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

Blogs

Book Recommendations