Warum Ihr Projekt ein API Gateway auf JavaScript braucht?
\n\nStellen Sie sich vor, Ihr Backend ist ein riesiges Einkaufszentrum. Darin befinden sich Dutzende von Geschäften (Mikroservices): eines verkauft Bücher, ein anderes Kleidung, ein drittes Elektronik. Jedes Geschäft hat seinen eigenen Eingang, seine eigenen Regeln und seine eigene Sprache. Und jetzt stellen Sie sich vor, ein Besucher (die Client-Anwendung) müsste alle diese Eingänge abklappern, um ein einziges T-Shirt zu kaufen. Chaos, oder?
\n\nIn der Welt der Webentwicklung löst API Gateway dieses Problem – ein zentraler Einstiegspunkt für alle Mikroservices. Es fungiert wie der Verwalter des Einkaufszentrums: Es leitet Anfragen weiter, überprüft Tickets (Token), sammelt Daten aus verschiedenen Geschäften und gibt dem Kunden eine fertige Antwort. Und heute schauen wir uns an, wie man ein solches Gateway in reinem JavaScript mit Node.js schreibt.
\n\nDieser Artikel ist sowohl für Anfänger nützlich, die sich gerade erst mit der Mikroservices-Architektur vertraut machen, als auch für erfahrene Entwickler, die funktionierende Codebeispiele sehen möchten. Los geht's!
\n\nWas ist ein API Gateway und wozu braucht man es?
\n\nAPI Gateway ist eine serverseitige Komponente, die als Zwischenschicht zwischen dem Client und den internen Diensten fungiert. Es übernimmt:
\n- \n
- Routing – leitet Anfragen an den richtigen Mikroservice weiter. \n
- Authentifizierung und Autorisierung – prüft, ob der Benutzer Zugriff hat. \n
- Datenaggregation – sammelt Antworten von mehreren Diensten in einer einzigen. \n
- Anfragenbegrenzung – schützt das Backend vor Überlastung. \n
- Protokolltransformation – konvertiert z. B. REST in GraphQL. \n
Für JavaScript-Dienste (insbesondere auf Node.js) ist ein API Gateway die natürliche Wahl. Es lässt sich leicht mit Express, Koa oder Fastify schreiben, und vor allem ermöglicht es, einen einheitlichen Codestil im gesamten Projekt beizubehalten.
\n\nEntwurf der API Gateway-Struktur auf Node.js
\n\nBevor wir Code schreiben, legen wir die Architektur fest. Nehmen wir an, wir haben drei Mikroservices:
\n- \n
users-service– Benutzerverwaltung (Port 3001). \n orders-service– Bestellungen (Port 3002). \n products-service– Produktkatalog (Port 3003). \n
Der Client (Frontend) greift nur auf das Gateway auf Port 8080 zu. Das Gateway entscheidet selbst, wohin die Anfrage weitergeleitet wird.
\n\nSchritt 1. Grundlegende Express-Einrichtung
\n\nErstellen wir ein neues Projekt und installieren die Abhängigkeiten:
\nmkdir api-gateway\ncd api-gateway\nnpm init -y\nnpm install express http-proxy-middleware dotenv\n\nJetzt schreiben wir ein einfaches Gateway, das Anfragen an die Dienste weiterleitet:
\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// Routen für Mikroservices\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 läuft auf Port ${PORT}`);\n});\n\nDas war's! Jede Anfrage an /users wird nun automatisch an den users-service weitergeleitet. Aber das ist erst der Anfang. Ein echtes Gateway muss mehr können.
Authentifizierung und Token-Überprüfung hinzufügen
\n\nEine der Hauptaufgaben eines API Gateway ist die zentrale Authentifizierung. Anstatt JWT in jedem Mikroservice zu überprüfen, machen wir das einmal im Gateway.
\n\nFügen wir eine Middleware zur Token-Überprüfung hinzu:
\n// middleware/auth.js\nconst jwt = require('jsonwebtoken');\n\nconst authMiddleware = (req, res, next) =>