Appearance
提交作答
POST
/api/app/course/{courseId}/task/{taskId}/marker/quiz/{quizId}/finish
提交弹题作答。当前轮同题若已存在非 none 结果,则不覆盖落库,直接返回已存结果。服务端根据 startedAt 与请求到达时间差判定超时。
位置参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| courseId | number | 是 | 课程 ID |
| taskId | number | 是 | 任务 ID |
| quizId | number | 是 | 题目主键(question_marker.id) |
请求
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| clientUuid | string | 是 | start 返回的当前答题窗口租约 |
| userAnswer | string / array / boolean / null | 非超时场景按题型要求 | 用户答案 |
userAnswer 形态
| type | userAnswer 示例 |
|---|---|
| single_choice | "B" |
| determine | true / false |
| choice / uncertain_choice | ["A", "C"] |
| fill | ["填空1", "填空2"] |
说明:
- 判断题对前端契约使用
Boolean;服务端内部会转换为"1"/"0"后再评分与落库 - 单选题 / 判断题点击选项即提交;多选 / 不定项需点击提交按钮
- 多选 / 不定项未点击提交按钮即被强制收题时,按未作答处理
- 服务端判定超时时会忽略
userAnswer,按noAnswer落库
请求示例
json
{
"clientUuid": "4bcaad66-f327-4f57-94c4-12f9a8bdbef7",
"userAnswer": true
}响应
| 字段 | 类型 | 说明 |
|---|---|---|
| id | number | 题目 ID |
| result | string | 题结果:right / wrong / partRight / noAnswer |
| score | number | 题得分 |
| correctAnswer | boolean / string / array / null | 正确答案;判断题为 Boolean,单选为字符串,多选为字符串数组,填空为字符串数组 |
| userAnswer | boolean / string / array / null | 用户答案;超时或无作答时为 null |
| analysis | string | 解析纯文本,已去 HTML |
| totalScore | number | 累计总分 |
响应示例
json
{
"id": 501,
"result": "right",
"score": 820,
"correctAnswer": "B",
"userAnswer": "B",
"analysis": "解析",
"totalScore": 820
}异常
| 错误码 | HTTP | 说明 |
|---|---|---|
COURSE_VIDEO_MARKER_TASK_MISMATCH | 400 | 任务与弹题不匹配 |
COURSE_VIDEO_MARKER_NOT_FOUND | 404 | 弹题或题目不存在 |
COURSE_VIDEO_MARKER_QUIZ_NOT_STARTED | 400 | 请先开始弹题答题 |
COURSE_VIDEO_MARKER_QUIZ_ORDER_VIOLATION | 400 | 请按题目顺序作答 |
COURSE_VIDEO_MARKER_PARAM_INVALID | 400 | 弹题参数不合法 |
COURSE_VIDEO_MARKER_LEASE_MISMATCH | 400 | 答题已在新窗口进行,请刷新后继续 |