API 规范 #

这一页记录当前阶段已经落地的接口约定,作为前后端联调的统一依据。

统一规则 #

  • API 版本前缀统一使用 /api/v1
  • 返回结构统一为 codemessagedata
  • 用户登录后,系统会自动保持访问状态
  • 调试时也可以使用 Authorization: Bearer <token> 方式访问接口
  • 接口文档统一采用 OpenAPI + Swagger UI
  • 健康检查统一使用 /actuator/health

基础接口 #

  • Swagger UI: GET /swagger-ui.html
  • OpenAPI JSON: GET /v3/api-docs
  • 健康检查(Actuator): GET /actuator/health

说明: - 以上健康检查和 Swagger 文档接口允许匿名访问。 - 其他业务接口默认需要登录,除注册与登录外都必须带上有效凭证。

用户模块 #

  • 用户注册: POST /api/v1/auth/register
  • 用户登录: POST /api/v1/auth/login
  • 当前用户信息: GET /api/v1/auth/me
  • 用户退出登录: POST /api/v1/auth/logout

注册请求字段: - username - email - password - displayName,可选 - role,可选,当前支持 STUDENTTEACHER

登录请求字段: - identifier,支持用户名或邮箱 - password

登录与退出说明: - 登录成功后,系统会记录当前登录状态。 - POST /api/v1/auth/logout 会结束当前登录状态,前端应主动跳回登录页。

课程模块 #

  • 创建课程: POST /api/v1/courses
  • 课程列表: GET /api/v1/courses
  • 课程详情: GET /api/v1/courses/{courseId}
  • 加入课程: POST /api/v1/courses/join
  • 课程成员: GET /api/v1/courses/{courseId}/members
  • 课程公告列表: GET /api/v1/courses/{courseId}/announcements
  • 教师发布公告: POST /api/v1/courses/{courseId}/announcements

课程创建请求字段: - title - description

加入课程请求字段: - inviteCode

课程学习模块 #

  • 课程学习结构总览: GET /api/v1/courses/{courseId}/learning
  • 课程学习汇总概览: GET /api/v1/courses/{courseId}/learning/overview
  • 创建学习单元: POST /api/v1/courses/{courseId}/learning/units
  • 创建知识点: POST /api/v1/courses/{courseId}/learning/units/{unitId}/points
  • 创建学习任务: POST /api/v1/courses/{courseId}/learning/points/{pointId}/tasks
  • 任务提交列表: GET /api/v1/courses/{courseId}/learning/tasks/{taskId}/submissions
  • 提交任务答卷: POST /api/v1/courses/{courseId}/learning/tasks/{taskId}/submissions
  • 教师评分: PATCH /api/v1/courses/{courseId}/learning/submissions/{submissionId}/grade

学习任务支持两类: - 媒体学习:文件、链接或文本材料 - 随堂测试:单选题、多选题、简答题

评分请求字段: - score,范围 0-100 - feedback,可选

作业与提醒模块 #

课程工作区模块配置 #

  • 获取模块配置: GET /api/v1/courses/{courseId}/workspace/modules
  • 更新模块配置: PUT /api/v1/courses/{courseId}/workspace/modules

权限说明:获取接口课程成员可查看,更新接口仅教师可操作。

模块配置字段: - modules[],每个模块包含 moduleKeyenabledsortOrder

学习任务排序 #

  • 同知识点任务重排: PATCH /api/v1/courses/{courseId}/learning/points/{pointId}/tasks/order

请求字段: - orderedTaskIds[],按新顺序排列的任务 ID 数组

权限:仅教师可操作。

作业中心 #

  • 课程作业列表: GET /api/v1/courses/{courseId}/homeworks
  • 我的作业汇总: GET /api/v1/homeworks/mine

课程作业列表返回字段: - items[],每个作业包含 taskIdcourseIdcourseTitletitlestartAtdueAtstatussubmittedAtscoreremainingSeconds - status 枚举:NOT_STARTED / IN_PROGRESS / SUBMITTED / OVERDUE

我的作业汇总支持查询参数 statuscourseId,课程成员与登录用户均可访问。

站内提醒收件箱 #

  • 消息列表: GET /api/v1/notifications
  • 标记已读: PATCH /api/v1/notifications/{notificationId}/read
  • 全部已读: PATCH /api/v1/notifications/read-all

消息列表支持参数 unreadOnly(默认 false)。

作业提醒触发点 #

系统在以下时机自动生成提醒事件: - START:作业开始时间 - BEFORE_DUE_24H:截止前 24 小时 - DUE:截止时间

若对应提醒开关关闭,则该触发点不生成提醒事件。

实验模块 #

  • 发布实验: POST /api/v1/courses/{courseId}/experiments
  • 实验列表: GET /api/v1/courses/{courseId}/experiments
  • 实验详情: GET /api/v1/courses/{courseId}/experiments/{experimentId}

实验创建请求字段: - title - description - dueAt

提交模块 #

  • 提交实验: POST /api/v1/experiments/{experimentId}/submissions
  • 提交列表: GET /api/v1/experiments/{experimentId}/submissions
  • 当前用户最新提交: GET /api/v1/experiments/{experimentId}/submissions/latest
  • 教师评分: PATCH /api/v1/submissions/{submissionId}/grade

提交接口使用 multipart/form-data,其中: - file 必填 - note 可选

评分请求字段: - score,范围 0-100 - feedback,可选

资源模块 #

  • 教师上传资源: POST /api/v1/courses/{courseId}/resources
  • 课程资源列表: GET /api/v1/courses/{courseId}/resources
  • 文件资源访问: GET /api/v1/resources/{resourceId}/file

资源上传接口使用 multipart/form-data,其中: - name 必填 - type 必填,支持 FILEVIDEOLINK - category 可选 - filetype=FILE 时必填 - externalUrltype=VIDEO/LINK 时必填(仅支持 http/https

成绩汇总模块 #

  • 课程成绩汇总(教师): GET /api/v1/courses/{courseId}/grades/overview

返回结构说明: - students 为课程内学生列表 - 每个学生包含 submissionCountgradedCountaverageScore - experiments 为该学生已提交实验的评分明细

设计原则 #

  • 路径语义清晰
  • 请求和响应都要可文档化
  • 前后端对字段名称保持一致
  • 教师和学生的权限边界要由后端统一控制

前端路由与 API 对齐 #

  • 登录页: /login
  • 课程列表页: /courses
  • 课程详情页: /courses/{courseId}
  • 实验详情页: /experiments/{experimentId}?courseId={courseId}

联调约定: - 前端统一通过 /core/api/v1/* 访问后端,避免在页面里直接拼装后端地址。 - 请求层会自动携带登录状态。 - 返回结构统一解析 code/message/data,并在 401/403 场景给出可理解提示。

常见错误码 #

详细的错误码清单、触发场景与处理建议参见 错误码速查