笔试系统

获取试卷列表

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"
  }
}

获取笔试题目列表

GET /open_api/v1/written_questions

请求参数:

参数名 必填 参数类型 描述
search string 搜索关键字
question_type string 题目类型:'choice' 选择题,'essay' 问答题,'programming' 编程题,'video' 音视频题
page Integer 页数
per_page Integer 分页大小,默认25,最大50

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

参数名 必填 参数类型 描述
count Integer 题目总数
questions Array 题目数组
id Integer 题目ID
creator_name String 题目创建人名称
title String 题目标题备注
question_type String 题目类型
description String 题目内容

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "count": 2,
    "questions": [
      {
        "id": 1,
        "title": "测试编程题 - 五",
        "creator_name": "李四",
        "question_type": "programming",
        "description": "冒泡排序:从当前元素起,向后依次比较每一对相邻元素,若逆序则交换",
      },
      {
        "id": 2,
        "title": "测试选择题",
        "creator_name": "王五",
        "question_type": "choice",
        "description": "这是一个选择题的题目内容",
      }
    ]
  }
}

创建笔试题目

POST /open_api/v1/written_questions

请求参数:

参数名 必填 参数类型 描述
creator_id Integer 题目创建人,默认为管理员
question_type String 题目类型:'choice' 选择题,'essay' 问答题,'programming' 编程题,'video' 音视频题
description String 题目内容,支持Markdown格式
title String 题目标题备注
key String 题目考点、备注、参考答案,仅面试官查看(为编程题且测试用例不为空时,需要传入正确的代码答案)
suggested_score Integer 建议分值
content_json Object 题目详细信息,根据题目类型需要不同数据,见详细说明

content_json 结构说明

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

{
  // 选择题选项,最少需要2个,最多为16个
  "options": [
    {
      "content": "这是选项A", // 选项内容
      "correctly": true,  // 是否为正确答案
    },
    {
      "content": "这是选项B",
      "correctly": true,
    },
    {
      "content": "这是选项C",
      "correctly": false,
    },
  ]
}

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

{
  "language": "java", // 编程语言,为空时不限语言
  "code_content": "public class ShowMeBug {}", // 默认代码片段
  "unit_content": "public class ShowMeBugTest {}", // 测试用例代码,为空时为普通编程题
}

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

{
  "video_duration": 5, // 最大录制时长, 支持的范围 3, 5, 15 分钟
  "video_category": "video" // 录制类型, video 音视频 | audio 仅音频
}

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

参数名 参数类型 描述
id Integer 题目ID
question_type String 题目类型
description String 题目内容
title String 题目标题备注
key String 题目考点、备注、参考答案,仅面试官查看(为编程题且测试用例不为空时,需要传入正确的代码答案)
suggested_score Integer 建议分值
content_json Object 题目详细信息,根据题目类型需要不同数据,见详细说明
creator_id Integer 创建人ID
creator_name String 创建人名称
created_at String 创建时间,ISO8601格式
updated_at String 更新时间,ISO8601格式

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "id": 1,
    "question_type": "video",
    "title": null,
    "description": "test",
    "key": null,
    "suggested_score": 10,
    "content_json": {
        "video_category": "video",
        "video_duration": 3
    },
    "created_at": "2021-02-24T16:19:08+08:00",
    "updated_at": "2021-02-24T16:19:08+08:00"
  }
}

批量创建笔试题目

POST /open_api/v1/batch_written_questions

请求参数:

参数名 必填 参数类型 描述
creator_id Integer 题目创建人,默认为管理员
written_questions Array 题目列表,最大长度为100
question_type String 题目类型:'choice' 选择题,'essay' 问答题,'programming' 编程题,'video' 音视频题
description String 题目内容,支持Markdown格式
title String 题目标题备注
key String 题目考点、备注、参考答案,仅面试官查看(为编程题且测试用例不为空时,需要传入正确的代码答案)
suggested_score Integer 建议分值
content_json Object 题目详细信息,根据题目类型需要不同数据,见详细说明

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

参数名 参数类型 描述
success_count Boolean 创建成功数量
fail_count String 失败数量
written_questions Array 题目数组
success Boolean 是否创建成功
message String 失败原因
written_question Object 题目信息,成功时与创建题目返回一致,失败时为传入题目参数

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "success_count": 1,
    "fail_count": 1,
    "written_questions": [
      {
        "success": true,
        "message": "",
        "written_question": {
          "id": 1,
          "question_type": "video",
          "title": null,
          "description": "test",
          "key": null,
          "suggested_score": 10,
          "content_json": {
            "video_category": "video",
            "video_duration": 3
          },
          "created_at": "2021-02-24T16:19:08+08:00",
          "updated_at": "2021-02-24T16:19:08+08:00",
        }
      },
      {
        "success": false,
        "message": "Video category 不能为空",
        "question": {
          "question_type": "video",
          "title": null,
          "description": "test",
          "key": null,
          "suggested_score": 10,
          "content_json": {
            "video_category": "video",
            "video_duration": 3
          },
        }
      }
    ]
  }
}

删除笔试题目

DELETE /open_api/v1/written_questions/:id

返回结果:

例:

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

创建笔试

POST /open_api/v1/written_pads

请求参数:

参数名 必填 参数类型 描述
exam_id Integer 试卷ID
name String 候选人名称

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

参数名 必填 参数类型 描述
uid String 笔试UID
url String 候选人笔试地址
interviewer_url String 面试官监考地址

例:

{
  "errcode": 0,
  "errmsg": "成功",
  "data": {
    "uid": "ABSDHF",
    "url": "https://www.showmebug.com/xxxxxxxx",
    "interviewer_url": "https://www.showmebug.com/xxxxxxxx"
  }
}

批量创建笔试

POST /open_api/v1/batch_written_pads

请求参数:

参数名 参数名 必填 参数类型 描述
exam_id Integer 试卷ID
user_id Integer 创建人ID
candidates Array[] 候选人数组,最多为50个
name String 候选人名称
uid String 候选人uid

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

参数名 参数名 必填 参数类型 描述
written_pads Array[] 笔试数组
uid String 笔试UID
url String 候选人笔试地址
interviewer_url String 面试官监考地址
candidate_uid String 候选人uid
candidate_name 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": "李四"
      }
    ]
  }
}

获取笔试列表

GET /open_api/v1/written_pads

请求参数:

参数名 必填 参数类型 描述
search string 搜索关键字,笔试板名称
creator_id Integer 发卷人ID
exam_id Integer 试卷ID
status Array 笔试状态: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 面试官评价
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": "还不错,可以继续",
        "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,
        "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 试卷名称
total_score Integer 试卷总分
score Integer 候选人得分
duration Integer 笔试时长,单位秒
switch_screen_count Integer 切屏次数
switch_screen_time_seconds Integer 切屏总时长,单位秒
evaluation String 面试官评价
created_at Datetime 创建时间,格式ISO8601
write_started_at Datetime 开始时间,格式ISO8601
write_submitted_at Datetime 提交时间,格式ISO8601
write_abondoned_at Datetime 放弃时间,格式ISO8601
pad Object 笔试对应面试板
id Integer 面试ID
number String 面试唯一编号,uid
status String 面试状态,interview_drafted 未开始,interview_opened 进行中,interview_ended 已结束
questions Array 笔试题目数组
id Integer 题目ID
question_type String 题目类型,choice 选择题,essay 问答题,programming 编程题,video 音视频题
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": "测试卷一",
    "total_score": 100,
    "score": 80,
    "duration": 1800,
    "switch_screen_count": 1,
    "switch_screen_time_seconds": 5,
    "evaluation": "还不错,可以继续",
    "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"
      }
    ]
  },
}

删除笔试

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
  }
}

条 "" 的搜索结果

    没有 "" 的搜索结果