基于JavaScript的微服务API网关:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么你的项目需要基于JavaScript的API网关?



想象一下,你的后端是一个巨大的购物中心。里面有几十家商店(微服务):一家卖书,一家卖衣服,一家卖电子产品。每家商店都有自己的入口、自己的规则和自己的语言。现在想象一下,顾客(客户端应用)为了买一件T恤,必须跑遍所有这些入口。一片混乱,对吧?



在Web开发世界中,API网关解决了这个问题——它是所有微服务的统一入口点。它就像购物中心的管理员:引导请求、检查票据(令牌)、从不同商店收集数据,并将准备好的响应返回给客户端。今天,我们将讨论如何使用Node.js用纯JavaScript编写这样一个网关。



这篇文章既适合刚接触微服务架构的初学者,也适合希望看到实际代码示例的经验丰富的开发者。我们开始吧!



什么是API网关,为什么需要它?



API网关是一个服务器端组件,充当客户端和内部服务之间的中间层。它负责:

  • 路由——将请求引导到正确的微服务。
  • 身份验证和授权——检查用户是否有访问权限。
  • 数据聚合——将来自多个服务的响应合并为一个。
  • 请求限流——保护后端免受过载。
  • 协议转换——例如,将REST转换为GraphQL。


对于JavaScript服务(尤其是基于Node.js的),API网关是一个自然的选择。它很容易用Express、Koa或Fastify编写,而且最重要的是,它允许在整个项目中保持统一的代码风格。



设计基于Node.js的API网关结构



在编写代码之前,让我们先确定架构。假设我们有三个微服务:

  • users-service——用户管理(端口3001)。
  • orders-service——订单(端口3002)。
  • products-service——产品目录(端口3003)。


客户端(前端)只访问端口8080上的网关。网关自行决定将请求发送到哪里。



步骤1. Express基础设置



创建一个新项目并安装依赖项:

mkdir api-gatewaycd api-gatewaynpm init -ynpm install express http-proxy-middleware dotenv


现在,编写一个简单的网关,将请求代理到服务:

// gateway.jsconst express = require('express');const { createProxyMiddleware } = require('http-proxy-middleware');require('dotenv').config();

const app = express();const PORT = process.env.PORT || 8080;

// 微服务的路由app.use('/users', createProxyMiddleware({ target: 'http://localhost:3001', changeOrigin: true,}));

app.use('/orders', createProxyMiddleware({ target: 'http://localhost:3002', changeOrigin: true,}));

app.use('/products', createProxyMiddleware({ target: 'http://localhost:3003', changeOrigin: true,}));

app.listen(PORT, () => { console.log(`API网关已在端口${PORT}上启动`);});


就这样!现在任何对/users的请求都会自动重定向到users-service。但这只是开始。真正的网关应该做得更多。



添加身份验证和令牌检查



API网关的主要任务之一是集中式身份验证。与其在每个微服务中检查JWT,我们只需在网关中执行一次。



添加用于检查令牌的中间件:

// middleware/auth.jsconst jwt = require('jsonwebtoken');

const authMiddleware = (req, res, next) =>

博客

书籍推荐