服务说明
Becoder开放平台的评测能力服务(RemoteJudge)。
目前仅开放 标准版 一个套餐。如果评测量大可以单独联系。
目前仅开放 标准版 一个套餐。如果评测量大可以单独联系。
计费点
用户付费后,在一定时间内可以获得一定数量的计费点,用于使用评测服务。
- 目前1计费点=0.02元=0.02金币;
- 每次评测成功后,将至少扣除 1 个计费点;
- 如果该评测的实际运行时间超过 10 秒,则每超过 10 秒(不到 10 秒的部分算作 10 秒),增扣 1 个计费点;
- 每次评测扣除计费点的上限为 10 个计费点;
- 评测失败时(指平台没有产生结果,不包括编译失败等情况)不扣除计费点。
服务标准
- 服务可用性:99.99%。本项数据是指在一个月内,计划外的故障导致无法使用评测服务的时长,不超过一个月的 0.01%。
- 可以评测所有的公共非远程提交题目,两万余道,版权题目后续以其他方式提供评测服务。
- 提供公共题目的题面。但不会直接提供测试数据。
- 提供技术支持服务协助接入。
- 以1s时限的题目为例,目前评测能力为(700次 至 800 次)/分钟,提交能力为(1200次 至 1500次)/分钟。
API 说明文档
接口名称
用户登录,获取 accessToken 和 refreshToken
接口路径
/api/judge-login
请求方法
POST
鉴权方式
无
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
username | string | 是 | 用户名 |
password | string | 是 | 密码 |
返回值
字段名 | 类型 | 说明 |
---|---|---|
success | boolean | 是否成功 |
accessToken | string | 短期有效的访问 token(1h) |
refreshToken | string | 长期有效的刷新 token(7d) |
计费说明
- 登录接口不计费
接口名称
检查用户是否登录
接口路径
/api/check-login
请求方法
GET
鉴权方式
JWT Bearer Token
请求参数
Header | Authorization | Bearer accessToken |
返回值
字段名 | 类型 | 说明 |
---|---|---|
success | boolean | 是否成功 |
user | object | 用户实例(含id,username) |
计费说明
- 检查用户是否登录接口不计费
接口名称
查询当前用户的可用计费点
接口路径
/api/credit
请求方法
GET
鉴权方式
JWT Bearer Token
请求参数
Header | Authorization | Bearer accessToken |
返回值
字段名 | 类型 | 说明 |
---|---|---|
success | boolean | 是否成功 |
credit | integer | 可用计费点数量 |
coin | number | 可用金币数量 |
计费说明
- 检查当前用户可用计费点接口不计费
接口名称
刷新 accessToken
接口路径
/api/refresh-token
请求方法
POST
鉴权方式
无
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
refreshToken | string | 是 | 长期有效的刷新 token |
返回值
字段名 | 类型 | 说明 |
---|---|---|
success | boolean | 是否成功 |
accessToken | string | 短期有效的访问 token |
计费说明
- 刷新accessToken接口不计费
接口名称
提交评测任务
接口路径
/api/judge/problem
请求方法
POST
鉴权方式
JWT Bearer Token
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
pid | string | 是 | 题目编号 |
lang | string | 是 | 评测语言(可选值:cpp11, cpp14, cpp17等) |
code | string | 是 | 源代码 |
o2 | boolean | 否 | 是否开启O2优化(默认开启,填不填都一样) |
trackId | string | 否 | 跟踪ID |
返回值
字段名 | 类型 | 说明 |
---|---|---|
success | boolean | 是否成功 |
requestId | integer | 评测请求ID |
计费说明
- 每次评测消耗 1 个计费点
- 评测实际运行时间超过 10 秒,每超过 10 秒增加 1 个计费点,最多 10 个
- 评测失败(无结果)不扣点
接口名称
获取评测结果
接口路径
/api/judge/result
请求方法
GET
鉴权方式
JWT Bearer Token
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
requestId | integer | 是 | 评测请求ID |
返回值
字段名 | 类型 | 说明 |
---|---|---|
success | boolean | 是否成功 |
requestId | integer | 评测请求ID |
status | string | 评测状态(如 Waiting, Accepted, Wrong Answer 等) |
score | number | 得分 |
total_time | number | 运行总时间(单位:毫秒) |
max_memory | number | 最大使用内存(单位:KB) |
code | string | 用户提交的源代码 |
formattedCode | string | 格式化后的代码 |
language | string | 评测语言 |
result | object | 评测详细结果,结构见下表 |
pending | boolean | 是否仍在评测中 |
submitTime | integer | 提交时间(时间戳) |
userId | integer | 用户ID |
problemId | integer | 题目ID |
creditDeducted | integer | 本次实际扣除的计费点(首次查成功时为正,后续为0) |
coinDeducted | number | 本次实际扣除的金币(首次查成功时为正,后续为0) |
message | string | 评测失败时的提示信息 |
计费说明
- 查询评测结果计费(评测成功后只计费一次,失败不计费)
接口名称
获取评测结果(长轮询)
接口路径
/api/judge/result_polling
请求方法
GET
鉴权方式
JWT Bearer Token
请求参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
requestId | integer | 是 | 评测请求ID |
返回值
字段名 | 类型 | 说明 |
---|---|---|
success | boolean | 是否成功 |
requestId | integer | 评测请求ID |
status | string | 评测状态(如 Waiting, Accepted, WrongAnswer, Runtime Error, PartiallyCorrect, MemoryLimitExceeded, TimeLimitExceeded, OutputLimitExceeded, FileError, RuntimeError, JudgementFailed, InvalidInteraction) |
total_time | number | 运行总时间(单位:毫秒) |
max_memory | number | 最大使用内存(单位:KB) |
score | number | 得分 |
code | string | 用户提交的源代码 |
formattedCode | string | 格式化后的代码 |
language | string | 评测语言 |
result | object | 评测详细结果,结构见下表 |
pending | boolean | 是否仍在评测中 |
submitTime | integer | 提交时间(时间戳,单位秒) |
userId | integer | 用户ID |
problemId | integer | 题目ID |
nextPoll | integer | 建议前端下次轮询间隔(毫秒) |
creditDeducted | integer | 本次实际扣除的计费点(首次查成功时为正,后续为0) |
coinDeducted | number | 本次实际扣除的金币(首次查成功时为正,后续为0) |
message | string | 评测失败时的提示信息 |
result 字段结构说明:
字段名 | 类型 | 说明 |
---|---|---|
compile | object | 编译结果 |
compile.status | integer | 编译状态(1=Compile类型,2=标准题,3=提交答案题,4=交互题) |
judge | object | 评测结果 |
judge.subtasks | array | 子任务列表 |
judge.subtasks[].cases | array | 测试点列表 |
judge.subtasks[].cases[].status | integer | 测试点状态(1=Compile类型,2=标准题,3=提交答案题,4=交互题) |
judge.subtasks[].cases[].result | object | 测试点详细结果 |
judge.subtasks[].cases[].result.type | integer | 结果类型(1=Accepted,2=WrongAnswer,3=PartiallyCorrect,4=MemoryLimitExceeded,5=TimeLimitExceeded,6=OutputLimitExceeded,7=FileError,8=RuntimeError,9=JudgementFailed,10=InvalidInteraction) |
judge.subtasks[].cases[].result.time | integer | 用时(毫秒) |
judge.subtasks[].cases[].result.memory | integer | 内存(KB) |
judge.subtasks[].cases[].result.userError | string | 用户程序错误输出 |
judge.subtasks[].cases[].result.userOutput | string/null | 用户输出 |
judge.subtasks[].cases[].result.scoringRate | number | 得分率 |
judge.subtasks[].cases[].result.spjMessage | string/null | SPJ消息 |
judge.subtasks[].cases[].result.input | object | 输入文件信息 |
judge.subtasks[].cases[].result.input.name | string | 输入文件名 |
judge.subtasks[].cases[].result.input.content | string | 输入内容(部分省略) |
judge.subtasks[].cases[].result.output | object | 输出文件信息 |
judge.subtasks[].cases[].result.output.name | string | 输出文件名 |
judge.subtasks[].cases[].result.output.content | string | 输出内容(部分省略) |
judge.subtasks[].cases[].result.systemMessage | string | 系统消息(如崩溃原因) |
计费说明
- 查询评测结果计费(评测成功后只计费一次,失败不计费)