2、数据请求入口设计:API网关、请求路由、身份认证基础
好,咱们进入第二个话题。数据请求入口,说白了就是用户或者外部系统怎么找到你的数据服务。我见过不少团队,一上来就写业务逻辑,结果接口乱成一锅粥,认证也漏得跟筛子似的。今天咱们就把这个入口捋清楚。
2.1 为什么需要API网关?
你想想看,一个消费者数据平台,背后可能有十几个微服务。用户查询个人信息、调取消费记录、更新地址……每个请求都得知道找谁。如果没有统一入口,客户端就得记一堆地址,安全策略也得重复写。这显然不现实。
API网关就是那个“看门人”。它站在最前面,统一接收所有请求。我个人习惯把网关比作公司的前台——你不需要知道每个部门在几楼,前台会帮你转接。
核心职责:
- 请求路由:把 /api/user/* 转到用户服务,把 /api/order/* 转到订单服务。
- 身份认证:在入口处统一校验 token,不合格的直接挡回去。
- 限流熔断:防止某个服务被突发流量打垮。
- 日志审计:记录谁、什么时候、调了什么接口。
我在项目中遇到过一种情况:某次大促,流量突然暴涨,后端订单服务扛不住了。幸好网关层配置了熔断策略,直接返回“服务繁忙”,保住了核心的用户查询功能。嗯,这就是网关的价值。
2.2 请求路由:怎么把请求送到正确的地方?
路由规则其实不复杂。常见的做法是基于 URL 路径前缀来分发。比如:
# 伪代码示例:路由配置
routes:
- path: /api/v1/user/**
service: user-service
- path: /api/v1/order/**
service: order-service
- path: /api/v1/consent/**
service: consent-service
这里要注意一个细节:路由匹配的优先级。我曾经踩过一个坑——把 /api/v1/user/** 和 /api/v1/user/profile/** 都配上了,结果因为顺序问题,profile 请求总被第一个规则吃掉。后来我养成了习惯:精确路径放前面,通配路径放后面。
小技巧: 在网关层做请求转发时,记得保留原始请求的 header 信息,尤其是 traceId。这样后续排查问题时,能串联起整个调用链。
2.3 身份认证基础:谁在访问我的数据?
身份认证是数据安全的第一道防线。消费者数据尤其敏感,你不能让任何人随便查。常见的做法是使用 JWT(JSON Web Token)。
流程大概是这样的:
- 用户登录,服务端验证身份后,签发一个 JWT。
- 客户端每次请求,都在 header 里带上这个 token。
- 网关层拦截请求,校验 token 的签名和有效期。
- 校验通过,才把请求转发给后端服务。
// 示例:JWT 校验中间件(Node.js 风格)
function authMiddleware(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).json({ error: '未提供认证信息' });
}
try {
const decoded = jwt.verify(token, SECRET_KEY);
req.user = decoded; // 把用户信息挂到请求上
next();
} catch (err) {
return res.status(403).json({ error: 'token 无效或已过期' });
}
}
避坑指南: 我曾经见过有人把 JWT 的 secret key 硬编码在代码里,结果代码泄露后,整个系统的 token 都可以被伪造。记住:密钥一定要放在环境变量或密钥管理服务里,别写死在代码中。
2.4 认证与授权的区别
很多新手容易搞混这两个概念。我简单解释一下:
| 概念 | 含义 | 例子 |
|---|---|---|
| 认证(Authentication) | 确认你是谁 | 检查用户名密码、校验 token |
| 授权(Authorization) | 确认你能做什么 | 普通用户只能看自己的数据,管理员可以看全部 |
在网关层,我们通常只做认证。授权逻辑一般下沉到具体的业务服务里。为什么?因为授权规则变化频繁,放在网关层会导致频繁重启,影响稳定性。
2.5 实际落地时的几个要点
嗯,最后分享几个我在项目中积累的经验:
- 统一错误响应:网关层返回的 401、403 错误,格式要统一。客户端好做统一处理。
- 白名单机制:有些接口(比如健康检查、登录接口)不需要认证。在网关层配一个白名单,直接放行。
- 日志记录:每个经过网关的请求,至少记录:时间、来源IP、请求路径、认证结果。这是审计的基础。
- 性能考量:网关是流量入口,不能太慢。JWT 的校验建议用缓存,别每次都去查数据库。
一句话总结: API网关是数据请求的守门员,路由决定请求去哪,认证决定请求能不能进。这三者配合好了,后面的业务逻辑才能安心跑。
好,这一章就到这里。下一章咱们聊聊数据模型设计——怎么把消费者数据组织得既灵活又好查。