后台交互流程
XYGo Admin 2025-02-20 193 次阅读
前后端请求流程、JWT 认证机制与接口规范
后台交互流程
请求流程
前端发起请求到后端响应的完整链路:
前端 API 调用
→ Axios 拦截器(自动注入 Token)
→ HTTP 请求
→ Nginx 反向代理
→ GoFrame HTTP Server
→ CORS 中间件
→ 慢接口监控中间件
→ 响应包装中间件
→ 鉴权中间件(JWT 校验)
→ 操作日志中间件
→ Controller
→ Service → Logic → DAO → DB
JWT 认证
后台管理员认证
- Token 类型:Bearer Token
- Header:
Authorization: Bearer <token> - 有效期:配置文件中设置
- 刷新机制:Token 过期后返回 code=61,前端自动跳转登录页
前台会员认证
- Token 类型:自定义 Header
- Header:
Xy-User-Token: <token> - 独立于后台管理员 Token,互不影响
被踢下线
当管理员在其他设备登录时,当前设备会收到 code=10010,前端弹窗提示并跳转登录页。
统一响应格式
所有接口返回统一的 JSON 结构:
json
{
"code": 0,
"message": "success",
"data": {},
"traceId": "abc123"
}
| 字段 | 说明 |
|---|---|
| code | 业务状态码,0=成功,-1=失败,61=未授权,10010=被踢下线 |
| message | 提示信息 |
| data | 业务数据 |
| traceId | 请求追踪 ID |
前端请求封装
项目提供三套请求实例:
typescript
import { adminRequest } from '@/utils/http'
import { memberRequest } from '@/utils/http'
import { siteRequest } from '@/utils/http'
// 后台管理接口
const res = await adminRequest.get({ url: '/user/list' })
// 会员接口
const res = await memberRequest.post({ url: '/auth/login', params: data })
// 公共接口(无需登录)
const res = await siteRequest.get({ url: '/doc/list' })
请求拦截器
- 根据 URL 前缀自动区分后台 Token / 会员 Token
- 自动从 Store 中读取并注入 Token
响应拦截器
- code=0:返回 data 字段
- code=61:清除 Token,跳转登录页(3 秒防抖)
- code=10010:弹窗提示被踢下线
- 其他:ElMessage 提示错误信息
API 定义规范(后端)
使用 GoFrame 的声明式路由,在 api/ 目录定义请求和响应结构体:
go
type UserListReq struct {
g.Meta `path:"/user/list" method:"get" tags:"用户管理" summary:"用户列表"`
Page int `json:"page" d:"1"`
PageSize int `json:"pageSize" d:"20"`
Username string `json:"username"`
}
type UserListRes struct {
List []entity.AdminUser `json:"list"`
Total int `json:"total"`
}