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)。

流程大概是这样的:

  1. 用户登录,服务端验证身份后,签发一个 JWT。
  2. 客户端每次请求,都在 header 里带上这个 token。
  3. 网关层拦截请求,校验 token 的签名和有效期。
  4. 校验通过,才把请求转发给后端服务。
// 示例: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网关是数据请求的守门员,路由决定请求去哪,认证决定请求能不能进。这三者配合好了,后面的业务逻辑才能安心跑。

好,这一章就到这里。下一章咱们聊聊数据模型设计——怎么把消费者数据组织得既灵活又好查。