You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ErrorDetecting/BACKEND_INTEGRATION.md

3.9 KiB

后端联调指南

环境与代理

  • 前端目录:frontend-vue
  • 开发代理:frontend-vue/vite.config.ts:25-30 将前端的 /api 代理到后端 VITE_API_TARGET
  • 环境变量:
    • frontend-vue/.env.development 示例:VITE_API_TARGET=https://your-backend.example.com
    • 可选:VITE_DEV_HOSTVITE_ALLOWED_HOSTS 控制本地开发主机与允许的外网访问
  • 启动与构建:
    • 开发:cd frontend-vue && npm i && npm run dev
    • 预览:npm run preview

鉴权与凭证

  • 认证头:Authorization: Bearer <token>
  • 前端存储:
    • localStorage 键名:cm_usercm_token
    • 应用启动恢复:frontend-vue/src/app/main.ts:10-12
  • 路由守卫:frontend-vue/src/app/router/index.ts:23-30 未登录重定向到登录页;基于 meta.roles 进行角色校验

关键接口规范

  • 健康检查:GET /v1/health
  • 登录:POST /v1/user/login
    • 请求体:{ username, password }
    • 响应体:{ token, user: { username, role, email? } }
  • 注册:POST /v1/user/register
    • 请求体:{ username, email, password, fullName }
    • 响应体:{ token?, user: { username, role, email? } }
  • 用户列表:GET /api/v1/users
    • 响应体:{ users: Array<{ username, role, email }> }Array<{ username, role, email }>
    • 前端选择逻辑:仅匹配当前登录用户名;未匹配则显示错误提示
    • 权限不足(例如操作员 403页面显示权限提示
    • 角色值规范化:后端返回的 role 会统一转为小写并支持常见别名(如 administratoradminopsoperator
  • 集群与节点:
    • GET /v1/clusters[{ uuid, host, ip, count, health }]
    • POST /v1/clustersDELETE /v1/clusters/:idPOST /v1/clusters/:id/start|stop
    • GET /v1/nodes?cluster=<uuid>[{ name, ip, status, cpu, mem, updated }]
    • POST /v1/nodes/:name/start|stopDELETE /v1/nodes/:name
  • 指标:
    • CPU 趋势:GET /v1/metrics/cpu_trend?cluster=<uuid>{ times: string[], values: number[] }
    • 内存使用:GET /v1/metrics/memory_usage?cluster=<uuid>{ used: number, free: number }
  • 诊断:
    • 故障摘要:GET /v1/faults/summary?node=<name>|cluster=<host>{ code, time, scope }
    • AI 对话历史:GET /v1/ai/history?sessionId=<id>{ messages: Array<{ role, content, reasoning? }> }
    • AI 对话:POST /v1/ai/chat{ reply, reasoning? }

前端数据绑定要点

  • 个人主页:frontend-vue/src/app/views/Profile.vue
    • 仅使用后端数据;加载中与错误态可视化
    • 角色标签映射:frontend-vue/src/app/constants/roles.ts
  • 角色来源:
    • 登录/注册优先采用后端返回的 user.rolerolefrontend-vue/src/app/stores/auth.ts:55-72,74-91
  • 诊断页与导航:
    • 路由授权:diagnosis 允许 admin/operatorfrontend-vue/src/app/router/index.ts:12
    • 侧边栏入口基于角色显示(frontend-vue/src/app/components/Sidebar.vue:7

联调步骤

  • 设置 VITE_API_TARGET 指向后端地址,确保后端允许来自前端的 CORS 与 Host
  • 启动前端后检查 GET /v1/health 返回正常
  • 使用真实账号登录,确认:
    • GET /v1/user/me 返回用户信息,个人主页字段显示为后端数据
    • 侧边栏与页面访问受角色控制
    • 仪表板与诊断页数据来自后端接口
  • 常见问题:
    • Token 无效或过期 → 返回 401,需要重新登录
    • 代理失败 → 检查 VITE_API_TARGET 与后端协议/端口
    • 外网访问本地开发 → 配置 VITE_ALLOWED_HOSTS,参考 Cloudflare-Tunnel-Guide.md

参考文件

  • frontend-vue/vite.config.ts
  • frontend-vue/src/app/main.ts
  • frontend-vue/src/app/router/index.ts
  • frontend-vue/src/app/stores/auth.ts
  • frontend-vue/src/app/views/Profile.vue
  • frontend-vue/src/app/components/Sidebar.vue
  • frontend-vue/src/app/constants/roles.ts