Skip to content

接口联调 ​

本文面向需要完成前后端联调、定位接口异常或扩展业务接口的研发人员。重点不是列出接口地址,而是说明完整联调链路:

  • 接口地址从哪里来
  • Token 是谁加上的
  • 刷新令牌是谁处理的
  • 请求签名是什么时候加上的
  • 某个接口报错时应该从前端哪一层查起

一条请求大致会经过哪些层 ​

text
页面 / 组件
  -> src/api/*.ts
  -> src/utils/http/index.ts
  -> /api/**
  -> Java 后端或 Nest.js 后端

理解这条链路后,可以把接口问题定位到页面、接口封装、请求层、代理规则或后端服务中的具体环节。

开发环境的请求入口 ​

开发环境下最关键的变量是:

txt
VITE_API_URL = /
VITE_API_PROXY_URL = http://localhost:13001
# Nest.js 后端使用 http://localhost:13000;代理地址只启用一行

浏览器里看到的请求路径通常是相对路径,实际由 Vite 代理到所选后端。Java 默认端口为 13001,Nest.js 默认端口为 13000。修改代理后重启前端,具体启动步骤见 快速开始。

请求层已经帮你做了什么 ​

src/utils/http/index.ts 已经统一处理了以下能力:

  • 自动携带 Authorization: Bearer <token>
  • 按后端公开安全配置,为需要签名的已登录请求追加 API 安全头
  • 统一 JSON 请求处理
  • 统一错误提示
  • 401 时尝试刷新 Access Token
  • 刷新失败时触发未授权处理

所以业务代码里通常只需要关心:

  • 调哪个接口
  • 传什么参数
  • 是否要跳过接口安全
  • 是否要静默处理某类错误

典型接口前缀 ​

两个后端按共享前端的接口约定提供服务。接口前缀不是全部统一为 /api/v1,应以 src/api 中的当前定义为准,不要批量替换版本号。

常见示例:

  • 登录:/api/v1/auth/signin
  • 刷新:/api/v1/auth/refresh
  • 当前用户:/api/v1/user/info
  • 菜单列表:/api/v3/system/menus
  • 公开站点配置:/api/v1/site-settings/public

登录与刷新链路 ​

登录时 ​

前端会:

  1. 调用登录接口
  2. 接收 Access Token
  3. 后续请求自动带上 Bearer Token

刷新页面时 ​

前端会尝试:

  1. 用 Refresh Token 恢复 Access Token
  2. 恢复成功后重新获取用户信息
  3. 再继续初始化菜单和路由

因此,刷新页面后登录状态失效通常需要优先排查鉴权链路,而不是直接修改业务页面。

已登录请求签名 ​

src/utils/api-security.ts 从 /api/v1/crypto/security-config 读取公开配置。只有 enabled 和 signatureRequired 都为 true 时,applyApiSecurityHeaders 才会附加签名、时间戳、随机数和载荷摘要等请求头;业务页面不应根据后端语言自行判断。

情况前端行为
Java 当前返回 signatureRequired: false保留 Bearer 登录态,不附加请求签名头
Nest.js 后端要求签名按公开安全配置生成请求签名头
登录、刷新等特殊请求按接口封装中的 skipApiSecurity 跳过签名逻辑

未出现签名头不一定是异常,应先检查当前后端是否要求签名。请求签名与登录鉴权、接口权限是不同机制,Java 不要求签名不代表无需登录或授权;密码字段的 RSA 加密也不能与请求签名混为一谈。

站点配置接入方式 ​

前端启动后会调用公开站点配置接口,并把后端返回的数据合并到前端默认展示值里。

这会影响:

  • 站点名称
  • 欢迎文案
  • SEO 标题
  • 水印文本
  • 是否允许注册

所以遇到“文案明明改了却没生效”,优先查的是站点配置接口,而不是先怀疑页面组件。

推荐的接口排查顺序 ​

1. 先看浏览器网络请求 ​

重点确认:

  • URL 是否正确
  • 请求是否使用了对应接口的实际路径与版本号
  • 请求头里是否有 Token
  • 返回码是 401、403 还是 500

2. 再看请求封装配置 ​

重点确认:

  • 是否被 skipApiSecurity
  • 是否触发了刷新令牌
  • 是否被静默错误处理吞掉了提示

3. 最后再看业务页面 ​

不要直接把所有异常归因到页面组件,很多接口问题发生在请求封装、Token 刷新或 API 安全处理层。

最常见的几类联调问题 ​

问题一:接口全部 404 ​

通常是代理地址、后端端口或接口前缀不一致。

问题二:登录成功后接口仍然 401 ​

通常是:

  • Access Token 没正确写入状态
  • 刷新链路失败
  • 后端 Cookie 或代理配置不对

问题三:少量接口异常,其他都正常 ​

通常要重点看该接口是否特殊处理了:

  • skipApiSecurity
  • 权限码
  • 文件上传 FormData
  • 静默未授权

联调建议 ​

  • 业务接口统一收口在 src/api
  • 不要在页面中直接手写 Axios
  • 登录、刷新、登出链路尽量不要绕开统一 HTTP 层
  • 如果要接第三方接口,建议单独封装,避免污染当前业务请求规则

检查清单 ​

完成接口联调后,建议确认:

  • 登录、刷新、用户信息、菜单和站点配置的实际 URL 与 src/api 定义一致。
  • 已登录请求正确携带 Bearer Token;签名头是否附加与后端公开安全配置一致。
  • 401、403、404、500 能按排查顺序定位到具体层级。
  • 新增业务接口已收口在 src/api,页面中没有散落的临时请求实现。

根据 MIT 许可证发布