What if one simple layer could make your whole app easier and safer to use?
Why API gateway concept in Express? - Purpose & Use Cases
Imagine you have many different services in your app, like user login, payments, and notifications. Without an API gateway, each client must talk directly to every service, remembering all their addresses and rules.
This manual way is slow and confusing. Clients get overwhelmed managing many connections. If a service changes, clients break. Security is harder because each service needs its own checks. It's like juggling many balls at once and dropping some.
An API gateway acts like a friendly receptionist. Clients talk to one place only. The gateway forwards requests to the right service, handles security, and combines responses. This makes the system simpler, safer, and easier to update.
fetch('http://user-service/login'); fetch('http://payment-service/pay');
fetch('http://api-gateway/login'); fetch('http://api-gateway/pay');
With an API gateway, you can build complex apps that are easy to maintain, secure, and scale without confusing your users or clients.
Think of a shopping app where the API gateway handles login, product search, and checkout behind the scenes, so the app talks to one place and gets everything done smoothly.
Manual direct calls to many services are complex and fragile.
API gateway centralizes communication and security.
This leads to simpler, safer, and scalable systems.
Practice
API gateway in a system using Express?Solution
Step 1: Understand the role of API gateway
An API gateway acts as a single entry point that routes client requests to appropriate backend services.Step 2: Eliminate incorrect roles
Storing data, replacing databases, or serving static files are not responsibilities of an API gateway.Final Answer:
It acts as a single entry point to route requests to multiple backend services. -> Option CQuick Check:
API gateway = single entry point [OK]
- Thinking API gateway stores data
- Confusing API gateway with database
- Assuming it serves static files directly
Solution
Step 1: Identify middleware for proxying requests
Thehttp-proxy-middlewarepackage is used to forward requests from the gateway to backend services.Step 2: Differentiate from other middleware
express.static()serves static files,body-parserparses request bodies, andcorsmanages cross-origin requests, none forward requests.Final Answer:
http-proxy-middleware -> Option AQuick Check:
Proxy middleware = http-proxy-middleware [OK]
- Using express.static() to proxy requests
- Confusing body-parser with proxying
- Assuming cors forwards requests
/api/users?
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use('/api/users', createProxyMiddleware({ target: 'http://localhost:5000', changeOrigin: true }));
app.listen(3000);Solution
Step 1: Analyze the proxy middleware setup
The middleware forwards requests matching/api/userstohttp://localhost:5000, preserving the path.Step 2: Understand request forwarding behavior
The request/api/userson port 3000 is proxied tohttp://localhost:5000/api/users.Final Answer:
The request is forwarded to http://localhost:5000/api/users -> Option DQuick Check:
Proxy forwards /api/users to target URL [OK]
- Assuming Express serves the request itself
- Expecting 404 without backend running
- Confusing CORS blocking with proxy behavior
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use('/api', createProxyMiddleware({ target: 'http://localhost:4000' }));
app.listen(3000);
// Client requests /api/users but gets no responseSolution
Step 1: Check proxy middleware options
WithoutchangeOrigin: true, the Host header sent to backend remains the gateway's, which may cause backend to reject requests.Step 2: Verify other parts
The target URL and path are correct, and app listens on port 3000, so those are not errors.Final Answer:
Missing changeOrigin: true causes backend to reject requests -> Option AQuick Check:
changeOrigin fixes Host header issues [OK]
- Ignoring changeOrigin option
- Assuming wrong target URL without checking
- Thinking app.listen is missing
Solution
Step 1: Identify routing and logging needs
The API gateway must route requests to multiple backends and log method and URL of each request.Step 2: Choose appropriate middleware
http-proxy-middlewarehandles routing, and a custom Express middleware can log requests before proxying.Step 3: Eliminate incorrect options
express.static()serves static files only, backend routing skips gateway, andbody-parserparses bodies but does not route or log.Final Answer:
Use http-proxy-middleware for routing and add a custom middleware before it to log requests. -> Option BQuick Check:
Proxy + custom middleware = routing + logging [OK]
- Using express.static() for routing
- Skipping gateway for routing
- Confusing body-parser with routing
Ready to prove it?
Pass the test and this pattern moves unknown
