笔试系统

获取试卷列表

GET /open_api/v1/exams

请求参数:

参数名 必填 参数类型 描述
search string 搜索关键字
page Integer 页数
per_page Integer 分页大小,默认25,最大50

返回结果(data中的内容):

参数名 必填 参数类型 描述
count Integer 试卷总数
exams Array 试卷数组
id Integer 试卷ID
creator_name String 试卷创建人名称
name String 试卷名称
questions_count Integer 题目数
duration Integer 试卷限时,单位分钟,0为不限
total_score Integer 试卷总分

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "count": 2,
    "exams": [
      {
        "id": 1,
        "name": "测试试卷一",
        "creator_name": "李四",
        "questions_count": 5,
        "duration": 30,
        "total_score": 100
      },
      {
        "id": 2,
        "name": "测试试卷二",
        "creator_name": "王五",
        "questions_count": 10,
        "duration": 60,
        "total_score": 100
      }
    ]
  }
}

删除试卷

DELETE /open_api/v1/exams/:id

返回结果:

例:

{
  "errcode": 0,
  "errmsg": "成功"
}

获取试卷批量发放链接

GET /open_api/v1/exams/:id/exam_link

请求参数:

参数名 必填 参数类型 描述
user_id Integer 试卷发放人ID

返回结果:

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "url": "https://www.showmebug.com/xxx"
  }
}

更新试卷批量发放链接

PATCH /open_api/v1/exams/:id/exam_link

注:更新链接会导致之前的链接失效

请求参数:

参数名 必填 参数类型 描述
user_id Integer 试卷发放人ID

返回结果:

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "url": "https://www.showmebug.com/xxx"
  }
}

创建考场

POST /open_api/v1/exam_rooms

请求参数:

参数名 必填 参数类型 描述
exam_id Integer 试卷 ID
name String 考场名称
exam_entrance_time_setting String 开考时间方式,参数范围:time_at 指定开考时间,time_range 设定时间范围,随来随考
exam_started_at Data 当 exam_entrance_time_setting 为 time_at 时,该字段必填,格式: 2023-11-11 11:00:00
exam_entrance_began_at Data 当 exam_entrance_time_setting 为 time_range 时,该字段必填,格式: 2023-11-11 11:00:00
exam_entrance_ended_at Data 当 exam_entrance_time_setting 为 time_range 时,该字段必填,格式: 2023-11-11 11:00:00

返回结果:

参数名 必填 参数类型 描述
id Integer 考场ID
name Integer 考场名称

例:

{
    "errcode": 0,
    "errmsg": "请求成功",
    "data": {
        "id": 543,
        "name": "测试考场111"
    }
}

获取考场列表

GET /open_api/v1/exam_rooms

请求参数:

参数名 必填 参数类型 描述
search string 搜索关键字(考场名称)
exam_id string 试卷ID
has_exam_start_time_expired Boolean 包含开考时间已过期的考场, 默认为true, 为false时过滤掉开考时间已过期的考场
page Integer 页数
per_page Integer 分页大小,默认25,最大50

返回结果(data中的内容):

参数名 必填 参数类型 描述
count Integer 考场总数
exam_rooms Array 考场数组
id Integer 考场ID
name String 考场名称
exam_id Integer 试卷ID
creator_name String 考场创建人名称
written_pads_count Integer 已发笔试数
limit_exam_start_time Boolean 限制开考时间, 该字段已废弃, 请使用exam_entrance_time_setting判断
exam_started_at String 开考时间, 当exam_entrance_time_setting为time_at时, 此参数为定开考时间
exam_delayed_arrival_times_min String 允许迟到时间
exam_entrance_time_setting String 设置开考时间参数, no_limit(未设置开考时间), time_at(设置指定开考时间), time_range(设定时间范围,随来随考)
exam_entrance_began_at String 当exam_entrance_time_setting为time_range时, 此参数为考试开始进入时间
exam_entrance_ended_at String 当exam_entrance_time_setting为time_range时, 此参数为考试截止进入时间
created_at String 创建时间
updated_at String 更新时间

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "count": 2,
    "exam_rooms": [
      {
        "id": 1,
        "creator_name": "李四",
        "name": "默认考场",
        "written_pads_count": 5,
        "limit_exam_start_time": false,
        "exam_started_at": "",
        "exam_delayed_arrival_times_min": "",
        "exam_entrance_time_setting": "no_limit",
        "exam_entrance_began_at": "",
        "exam_entrance_ended_at": "",
        "created_at": "2021-12-15T19:30:11.669+08:00",
        "updated_at": "2021-12-15T19:30:11.669+08:00"
      },
      {
        "id": 2,
        "creator_name": "王五",
        "name": "考场2",
        "written_pads_count": 1,
        "limit_exam_start_time": false,
        "exam_started_at": "",
        "exam_delayed_arrival_times_min": "",
        "exam_entrance_time_setting": "time_range",
        "exam_entrance_began_at": "2022-03-25T12:50:00.000+08:00",
        "exam_entrance_ended_at": "2022-04-22T12:50:00.000+08:00",
        "created_at": "2021-12-15T19:30:11.669+08:00",
        "updated_at": "2021-12-15T19:30:11.669+08:00"
      },
      {
        "id": 3,
        "creator_name": "张三",
        "name": "考场3",
        "written_pads_count": 1,
        "limit_exam_start_time": false,
        "exam_started_at": "2022-03-24T14:30:00.000+08:00",
        "exam_delayed_arrival_times_min": 5,
        "exam_entrance_time_setting": "time_at",
        "exam_entrance_began_at": "",
        "exam_entrance_ended_at": "",
        "created_at": "2021-12-15T19:30:11.669+08:00",
        "updated_at": "2021-12-15T19:30:11.669+08:00"
      }
    ]
  }
}

创建笔试

POST /open_api/v1/written_pads

请求参数:

参数名 必填 参数类型 描述
exam_id Integer 试卷ID
name String 候选人名称
dispatch_phone String 候选人手机号(此参数配合创建考场时勾选"限制仅能使用通知手机号/邮箱进入考试"功能使用,候选人在登录考试时必须以这个传入的手机号为准)
dispatch_email String 候选人邮箱(此参数配合创建考场时勾选"限制仅能使用通知手机号/邮箱进入考试"功能使用,候选人在登录考试时必须以这个传入的邮箱为准,如果同时传入了手机号和邮箱,登录时校验手机号)
exam_room_id Integer 考场ID(为空时, 系统取默认考场, 若试卷下无考场时, 系统会自动创建一个默认考场)
exam_started_at String 开考时间(格式: 2021-01-01 10:00:00), 优先取考场设置的开考时间

返回结果(data中的内容):

参数名 必填 参数类型 描述
uid String 笔试UID
url String 候选人笔试地址
interviewer_url String 面试官监考地址
exam_started_at String 开始进入考试答题时间
exam_entrance_ended_at String 结束进入考试答题时间

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "uid": "ABSDHF",
    "url": "https://www.showmebug.com/xxxxxxxx",
    "interviewer_url": "https://www.showmebug.com/xxxxxxxx",
    "exam_started_at": "2022-01-29T10:00:00.000+08:00",
    "exam_entrance_ended_at": "2022-02-29T10:00:00.000+08:00"
  }
}

批量创建笔试

POST /open_api/v1/batch_written_pads

请求参数:(一次最大支持50条数据)

参数名 参数名 必填 参数类型 描述
exam_id Integer 试卷ID
user_id Integer 创建人ID
exam_room_id Integer 考场ID(为空时, 系统取默认考场, 若试卷下无考场时, 系统会自动创建一个默认考场)
exam_started_at String 开考时间(格式: 2021-01-01 10:00:00), 优先取考场设置的开考时间
candidates Array[] 候选人数组,最多为50个
name String 候选人名称
uid String 候选人uid
dispatch_phone String 候选人手机号(此参数配合创建考场时勾选"限制仅能使用通知手机号/邮箱进入考试"功能使用,候选人在登录考试时必须以这个传入的手机号为准)
dispatch_email String 候选人邮箱(此参数配合创建考场时勾选"限制仅能使用通知手机号/邮箱进入考试"功能使用,候选人在登录考试时必须以这个传入的邮箱为准,如果同时传入了手机号和邮箱,登录时校验手机号)

返回结果(data中的内容):

参数名 参数名 必填 参数类型 描述
written_pads Array[] 笔试数组
uid String 笔试UID
url String 候选人笔试地址
interviewer_url String 面试官监考地址
candidate_uid String 候选人uid
candidate_name String 候选人名称
exam_started_at String 开始进入考试答题时间
exam_entrance_ended_at String 结束进入考试答题时间

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "written_pads": [
      {
        "uid": "ABSDHF",
        "url": "https://www.showmebug.com/xxxxxxxx",
        "interviewer_url": "https://www.showmebug.com/xxxxxxxx",
        "candidate_uid": "C001",
        "candidate_name": "李四",
        "exam_started_at": "2022-01-29T10:00:00.000+08:00",
        "exam_entrance_ended_at": "2022-02-29T10:00:00.000+08:00"
      }
    ]
  }
}

获取笔试列表

GET /open_api/v1/written_pads

请求参数:

参数名 必填 参数类型 描述
search String 搜索关键字,笔试板名称
creator_id Integer 发卷人ID
exam_id Integer 试卷ID
status String 笔试状态:write_opened 未开始,write_started 笔试中,write_submitted 已提交,write_abondoned 已放弃,write_ended 已完成
created_time_start Datetime 创建时间,时间段开始时间
created_time_end Datetime 创建时间,时间段结束时间
submitted_time_start Datetime 提交时间,时间段开始时间
submitted_time_end Datetime 提交时间,时间段结束时间
review_time_start Datetime 完成评卷时间,时间段开始时间
review_time_end Datetime 完成评卷时间,时间段结束时间
page Integer 页数
per_page Integer 分页大小,默认25,最大50

返回结果(data中的内容):

参数名 必填 参数类型 描述
count Integer 笔试总数
written_pads Array 笔试数组
id Integer 笔试ID
number String 笔试唯一编号,uid
name String 笔试板名称
status String 笔试状态
creator_id Integer 发卷人ID
creator_name String 发卷人名称
exam_id Integer 试卷ID
exam_name String 试卷名称
total_score Integer 试卷总分
score Integer 候选人得分
duration Integer 笔试时长,单位秒
switch_screen_count Integer 切屏次数
switch_screen_time_seconds Integer 切屏总时长,单位秒
evaluation String 面试官评价
exam_started_at Datetime 笔试开始时间,格式ISO8601
created_at Datetime 创建时间,格式ISO8601
write_started_at Datetime 开始时间,格式ISO8601
write_submitted_at Datetime 提交时间,格式ISO8601
write_abondoned_at Datetime 放弃时间,格式ISO8601
write_review_at Datetime 评卷时间,格式ISO8601
pad Object 笔试对应面试板
id Integer 面试ID
number String 面试唯一编号,uid
status String 面试状态,interview_drafted 未开始,interview_opened 进行中,interview_ended 已结束

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "count": 2,
    "written_pads": [
      {
        "id": 1,
        "number": "ABCDEF",
        "name": "李某",
        "status": "write_ended",
        "creator_id": 1,
        "creator_name": "李四",
        "exam_id": 1,
        "exam_name": "测试卷一",
        "total_score": 100,
        "score": 80,
        "duration": 1800,
        "switch_screen_count": 1,
        "switch_screen_time_seconds": 5,
        "evaluation": "还不错,可以继续",
        "exam_started_at": "2020-10-01T16:30:00+08:00",
        "created_at": "2020-10-01T16:00:00+08:00",
        "write_started_at": "2020-10-01T17:00:00+08:00",
        "write_submitted_at": "2020-10-01T17:30:00+08:00",
        "write_abondoned_at": null,
        "write_review_at": "2020-10-01T19:00:00+08:00",
        "pad": {
          "id": 1,
          "number": "KASDJF",
          "status": "interview_drafted"
        }
      },
      {
        "id": 2,
        "number": "ABCDEG",
        "name": "王某",
        "status": "write_abondoned",
        "creator_id": 1,
        "creator_name": "李四",
        "exam_id": 1,
        "exam_name": "测试卷一",
        "total_score": 100,
        "score": null,
        "duration": 900,
        "switch_screen_count": 5,
        "switch_screen_time_seconds": 60,
        "evaluation": null,
        "exam_started_at": "2020-10-01T16:30:00+08:00",
        "created_at": "2020-10-01T16:00:00+08:00",
        "write_started_at": "2020-10-01T17:00:00+08:00",
        "write_submitted_at": null,
        "write_abondoned_at": "2020-10-01T17:15:00+08:00",
        "write_review_at": null
      }
    ]
  }
}

笔试详情

GET /open_api/v1/written_pads/:uid

返回结果(data中的内容):

参数名 参数类型 描述
id Integer 笔试ID
number String 笔试唯一编号,uid
name String 笔试板名称
status String 笔试状态
creator_id Integer 发卷人ID
creator_name String 发卷人名称
exam_id Integer 试卷ID
exam_name String 试卷名称
exam_room_id Integer 考场ID
exam_room_name String 考场名称
copy_behavior_count Integer 粘贴次数
total_score Integer 试卷总分
score Integer 候选人得分
duration Integer 笔试时长,单位秒
switch_screen_count Integer 切屏次数
switch_screen_time_seconds Integer 切屏总时长,单位秒
evaluation String 面试官评价
exam_started_at Datetime 笔试开始时间,格式ISO8601
created_at Datetime 创建时间,格式ISO8601
write_started_at Datetime 开始时间,格式ISO8601
write_submitted_at Datetime 提交时间,格式ISO8601
write_abondoned_at Datetime 放弃时间,格式ISO8601
write_review_at Datetime 评卷时间,格式ISO8601
report_url String 笔试报告链接, 只有完成评卷后才会显示该字段
url String 笔试详情链接, 只有完成评卷后才会显示该字段
echart_png String 报告里的png格式的雷达图片,需完成评卷后, 先使用 GET 请求访问report_url链接后才会生成, 只有完成评卷后才会显示该字段
pad Object 笔试对应面试板
id Integer 面试ID
number String 面试唯一编号,uid
status String 面试状态,interview_drafted 未开始,interview_opened 进行中,interview_ended 已结束
questions Array 笔试题目数组
id Integer 题目ID
type_text String 题目分类,选择题,填空题,问答题,编程题,音视频题,架构绘图题,电路绘图题
question_type String 题目类型,choice 选择题,gap_filling 填空题,essay 问答题,programming 编程题,video 音视频题,drawing 架构绘图题
question_type_text String 题目类型名称,选择题:单选题、多选题,填空题, 问答题,编程题:旧编程题、基础编程题、前端框架题、前端界面题、后端框架题,音视频题,架构绘图题,电路绘图题
title String 题目标题
description String 题目内容
key String 参考答案
position Integer 题目位置
score Integer 题目总分
system_score Integer 系统评分
interviewer_score Integer 面试官评分
actual_score Integer 实际得分
candidate_skipped Boolean 是否跳过答题
candidate_answer String 候选人答案,音视频题时为视频ID
write_started_at Datetime 开始答题时间,格式ISO8601
write_ended_at Datetime 完成答题时间,格式ISO8601
testcase_mode Boolean 是否为自动判题编程题,仅编程题返回
content_json Object 题目内容,根据题目类型返回不同,见详细说明
videos Array 摄像头监控视频数组
id Integer 视频ID
started_at Datetime 视频开始时间,格式ISO8601
ended_at Datetime 视频结束时间,格式ISO8601

content_json 结构说明

question_type 为 choice 选择题时,content_json 结构如下所示

{
  "answer": [0, 1], // 候选人答案
  "options": [
    {
      "content": "这是选项A", // 选项内容
      "correctly": true,  // 是否为正确答案
    },
    {
      "content": "这是选项B",
      "correctly": true,
    },
    {
      "content": "这是选项C",
    },
  ]
}

question_type 为 programming 编程题时, content_json 结构如下所示

{
  "language": "java", // 编程语言,为空时不限语言
  "code_content": "public class ShowMeBug {}", // 默认代码片段
  "unit_content": "public class ShowMeBugTest {}", // 测试用例代码
  "answer": "public class ShowMeBug {}", // 候选人答案
  "answer_language_type": "java", // 候选人答题语言
  "testcase_running_status": "success" //测试用例运行状态 none drafted running success fail
}

question_type 为 video 音视频题时, content_json 结构如下所示

{
  "video_duration": 5, // 最大录制时长
  "video_category": "video" // 录制类型, video 音视频 | audio 仅音频
}

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "id": 1,
    "number": "ABCDEF",
    "name": "李某",
    "status": "write_ended",
    "creator_id": 1,
    "creator_name": "李四",
    "exam_id": 1,
    "exam_name": "测试卷一",
    "exam_room_id": 2,
    "exam_room_name": "测试考场一",
    "total_score": 100,
    "score": 80,
    "duration": 1800,
    "switch_screen_count": 1,
    "switch_screen_time_seconds": 5,
    "evaluation": "还不错,可以继续",
    "exam_started_at": "2020-10-01T16:30:00+08:00",
    "created_at": "2020-10-01T16:00:00+08:00",
    "write_started_at": "2020-10-01T17:00:00+08:00",
    "write_submitted_at": "2020-10-01T17:30:00+08:00",
    "write_abondoned_at": null,
    "write_review_at": "2020-10-01T19:00:00+08:00",
    "pad": {
      "id": 1,
      "number": "ABCDEF",
      "status": "interview_ended"
    },
    "questions": [
      {
        "id": 1348,
        "question_type": "programming",
        "title": "不限题",
        "description": "元素按从大到小的顺序",
        "key": "",
        "position": 1,
        "score": 20,
        "system_score": null,
        "interviewer_score": 10,
        "actual_score": 10,
        "candidate_skipped": false,
        "candidate_answer": "% // ## 请在下方进行输入 ( 支持Markdown、插入公式,点击上方按钮“环境说明”查看详情 )\n\n% // 必须定义一个 包名为 `main` 的包,并实现 `main()` 函数。\n% package main\n% import \"fmt\"\n\n% func main() {\n%   fmt.Println(\"Hello, world\")\n% }\n\n% 必须将 Module 声明为`showmebug`,然后为它定义并导出一个 start 方法\n-module(showmebug).\n-export([start/0]).\n\nstart() ->\n  say_hello(3).\n\nsay_hello(0) ->\n  0;\nsay_hello(N) ->\n  io:format(\"Hello, World~n\"),\n  say_hello(N - 1).\n",
        "content_json": {
          "answer": "% // ## 请在下方进行输入 ( 支持Markdown、插入公式,点击上方按钮“环境说明”查看详情 )\n\n% // 必须定义一个 包名为 `main` 的包,并实现 `main()` 函数。\n% package main\n% import \"fmt\"\n\n% func main() {\n%   fmt.Println(\"Hello, world\")\n% }\n\n% 必须将 Module 声明为`showmebug`,然后为它定义并导出一个 start 方法\n-module(showmebug).\n-export([start/0]).\n\nstart() ->\n  say_hello(3).\n\nsay_hello(0) ->\n  0;\nsay_hello(N) ->\n  io:format(\"Hello, World~n\"),\n  say_hello(N - 1).\n",
          "language": "",
          "code_content": "",
          "unit_content": "",
          "answer_language_type": "erlang",
          "testcase_running_status": "none"
        },
        "write_started_at": "2020-10-01T17:00:00+08:00",
        "write_ended_at": "2020-10-01T17:10:00+08:00",
        "testcase_mode": false
      },
    ],
    "videos": [
      {
        "id": 1001,
        "started_at": "2020-10-01T17:00:00+08:00",
        "ended_at": "2020-10-01T17:10:00+08:00"
      }
    ]
  }
}

批量一键评卷

PUT /open_api/v1/exam_rooms/:exam_room_id/batch_written_pad_reviews

请求参数:(一次最大支持50条数据)

参数名 必填 参数类型 描述
exam_room_id Integer 考场id
numbers Array 笔试uid

例:

{
  "numbers": ["AAAAA", "ZZZZZ"]
}

返回结果:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {}
}

批量分配评卷

POST /open_api/v1/exam_rooms/:exam_room_id/batch_written_pad_dispatch_reviewers

请求参数:(一次最大支持50条数据)

参数名 必填 参数类型 描述
exam_room_id Integer 考场id
reviewers Array 评卷官ids, 评卷官必须为团队成员
wpad_numbers Array 笔试uid

例:

{
  "reviewers": [1, 2, 3],
  "wpad_numbers": ["AAAAA", "ZZZZZ"]
}

返回结果:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": "分配成功"
}

笔试收卷

PUT /open_api/v1/written_pad_force_submits/:uid

返回结果:

例:

{
  "errcode": 0,
  "errmsg": "请求成功"
}

删除笔试

DELETE /open_api/v1/written_pads/:uid

返回结果:

例:

{
  "errcode": 0,
  "errmsg": "成功"
}

获取视频播放地址

GET /open_api/v1/videos/:id

返回结果:

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "url": "www.showmebug.com/xxxx/videos/xxxx.m3u8?_utoken=xxxxxxx",
    "expire_in": 7200
  }
}

获取笔试题能力维度列表

GET /open_api/v1/skill_dimensions

请求参数:

参数名 必填 参数类型 描述
page Integer 页数
per_page Integer 分页大小,默认25,最大50

返回结果(data中的内容):

参数名 必填 参数类型 描述
count Integer 能力维度总数
skill_dimensions Array 能力维度数组
id Integer 能力维度ID
name String 能力维度名称

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "count": 2,
    "skill_dimensions": [
      {
        "id": 1,
        "name": "能力维度一"
      },
      {
        "id": 2,
        "name": "能力维度二"
      }
    ]
  }
}

条 "" 的搜索结果

    没有 "" 的搜索结果