Files
012-kaopeilian/frontend/前后端接口约定.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

3.7 KiB

前后端接口约定

基础规范

请求格式

  • Base URL: http://localhost:8000 (开发) / https://aiedu.ireborn.com.cn (生产)
  • Content-Type: application/json
  • 认证: Authorization: Bearer <jwt_token>响应格式
{
  "code": 200,
  "message": "success",
  "data": {}
}

状态码

  • 200: 成功
  • 400: 参数错误
  • 401: 未认证
  • 403: 权限不足
  • 404: 资源不存在
  • 500: 服务器错误

核心接口

1. 认证模块 /api/v1/auth

登录

POST /api/v1/auth/login
{
  "username": "string",
  "password": "string"
}

注册

POST /api/v1/auth/register
{
  "username": "string",
  "email": "string",
  "password": "string",
  "name": "string"
}

刷新Token

POST /api/v1/auth/refresh
{
  "refresh_token": "string"
}

2. 用户模块 /api/v1/users

用户列表

GET /api/v1/users?page=1&size=10&keyword=string

当前用户

GET /api/v1/users/me

更新用户

PUT /api/v1/users/{id}
{
  "name": "string",
  "email": "string"
}

3. 课程模块 /api/v1/courses

课程列表

GET /api/v1/courses?page=1&size=10&category=string

课程详情

GET /api/v1/courses/{id}

课程材料

GET /api/v1/courses/{id}/materials

4. 考试模块 /api/v1/exams

开始考试

POST /api/v1/exams/dynamic/start
{
  "courseId": 1,
  "totalRounds": 10
}

提交答案

POST /api/v1/exams/dynamic/submit
{
  "sessionId": "string",
  "questionId": "string",
  "answer": "string"
}

考试记录

GET /api/v1/exams/records?page=1&size=10

5. 陪练模块 /api/v1/training

陪练场景

GET /api/v1/training-scenes

开始陪练

POST /api/v1/training/start
{
  "sceneId": 1
}

陪练记录

GET /api/v1/training-records?page=1&size=10

WebSocket陪练

WS /ws/v1/training/{sessionId}

6. 分析模块 /api/v1/analytics

系统概览

GET /api/v1/analytics/overview?timeRange=30d

能力雷达图

GET /api/v1/analytics/ability-radar?userId=1

数据结构

用户信息

{
  "id": 1,
  "username": "string",
  "email": "string",
  "name": "string",
  "role": "admin|manager|trainee",
  "status": "active|inactive"
}

课程信息

{
  "id": 1,
  "title": "string",
  "description": "string",
  "category": "string",
  "difficulty": "beginner|intermediate|advanced",
  "duration": 60,
  "progress": 0,
  "status": "published|draft"
}

考试题目

{
  "id": "string",
  "type": "single|multiple|judge|fill",
  "content": "string",
  "options": [{"id": "A", "content": "string"}],
  "score": 10
}

陪练场景

{
  "id": 1,
  "name": "string",
  "description": "string",
  "category": "string",
  "difficulty": "easy|medium|hard",
  "status": "active|inactive"
}

分页格式

请求参数

  • page: 页码 (从1开始)
  • size: 每页数量 (默认10)

响应格式

{
  "code": 200,
  "message": "success",
  "data": {
    "items": [],
    "total": 100,
    "page": 1,
    "size": 10
  }
}

文件上传

POST /api/v1/upload
Content-Type: multipart/form-data

file: <binary>
type: "avatar|course-cover|material"

响应:

{
  "code": 200,
  "message": "success",
  "data": {
    "url": "string",
    "filename": "string"
  }
}

错误格式

{
  "code": 400,
  "message": "参数错误",
  "data": null,
  "errors": [
    {
      "field": "email",
      "message": "邮箱格式不正确"
    }
  ]
}