开放接口、计费方式和接入说明

接口数量 11
鉴权方式 JWT/OAuth
服务能力 RemoteJudge
更多文档 /api-docs

公测说明

Becoder 开放平台目前处于公测阶段,服务 SLA 和接口稳定性仅能提供尽力而为的支持。如遇接入问题,可通过邮箱联系平台团队。

更详细的接口文档

更完整的 OpenAPI 文档可访问 https://becoder.com.cn/api-docs/

服务概览

服务说明 Becoder 开放平台提供评测能力服务(RemoteJudge)和 OAuth 第三方登录能力;如调用量较大,可单独联系。
计费点 1 计费点 = 0.02 元 = 0.02 金币;每次评测成功至少扣 1 点,超时按 10 秒阶梯增加,单次最多 10 点。
服务标准 服务可用性 99.99%;可评测两万余道公共非远程提交题目,并提供公共题面与接入支持。
  • 每次评测成功后,至少扣除 1 个计费点。
  • 如果实际运行时间超过 10 秒,则每超过 10 秒增扣 1 个计费点,不足 10 秒按 10 秒计算。
  • 每次评测扣除计费点上限为 10 个。
  • 平台未产生结果的评测失败请求不扣费。

以 1 秒时限题目为例,目前评测能力约为 700 至 800 次/分钟,提交能力约为 1200 至 1500 次/分钟。

用户登录,获取 accessToken 和 refreshToken

POST /api/judge-login

参数名 类型 必填 说明
username string 用户名
password string 密码
字段名 类型 说明
success boolean 是否成功
accessToken string 短期有效的访问 token(1h)
refreshToken string 长期有效的刷新 token(7d)
  • 登录接口不计费

检查用户是否登录

GET /api/check-login

JWT Bearer Token

位置 类型 必填 说明
Header Authorization - Bearer accessToken
字段名 类型 说明
success boolean 是否成功
user object 用户实例(含 id,username)
  • 检查用户是否登录接口不计费

查询当前用户的可用计费点

GET /api/credit

JWT Bearer Token

位置 类型 必填 说明
Header Authorization - Bearer accessToken
字段名 类型 说明
success boolean 是否成功
credit integer 可用计费点数量
coin number 可用金币数量
  • 检查当前用户可用计费点接口不计费

刷新 accessToken

POST /api/refresh-token

参数名 类型 必填 说明
refreshToken string 长期有效的刷新 token
字段名 类型 说明
success boolean 是否成功
accessToken string 短期有效的访问 token
  • 刷新 accessToken 接口不计费

第三方应用管理

GET /oauth/apps

平台登录态

参数名 类型 必填 说明
浏览器登录态 cookie 用户登录后访问,用于创建和管理 OAuth 应用
字段名 类型 说明
client_id string 第三方应用 ID
client_secret string 第三方应用密钥,仅创建或重置时显示一次
redirect_uris string 允许的回调地址列表
scopes string 应用可申请的权限范围
  • 第三方应用管理不计费

OAuth 授权码登录

GET /oauth/authorize

平台登录态

参数名 类型 必填 说明
client_id string 第三方应用 ID
redirect_uri string 必须与应用登记的回调地址完全一致
response_type string 固定为 code
scope string 权限范围,默认 profile,可追加 email
state string 建议 第三方生成的随机状态值,用于防 CSRF
字段名 类型 说明
code string 用户同意后回跳到 redirect_uri 携带的授权码,10 分钟有效且只能使用一次
state string 原样返回第三方传入的 state
error string 用户拒绝或授权失败时返回的错误码
  • OAuth 授权登录不计费

使用授权码换取 OAuth Token

POST /oauth/token

client_id + client_secret

参数名 类型 必填 说明
grant_type string authorization_code 或 refresh_token
client_id string 第三方应用 ID,也可通过 HTTP Basic Auth 传入
client_secret string 第三方应用密钥,也可通过 HTTP Basic Auth 传入
code string 授权码模式必填 授权回调拿到的 code
redirect_uri string 授权码模式必填 必须与 authorize 阶段一致
refresh_token string 刷新模式必填 刷新 access_token 使用
字段名 类型 说明
access_token string 访问令牌,默认 1 小时有效
token_type string 固定为 Bearer
expires_in integer access_token 有效期秒数
refresh_token string 刷新令牌,默认 30 天有效
scope string 本次授权的权限范围
  • OAuth Token 接口不计费

获取当前授权用户信息

GET /oauth/userinfo

OAuth Bearer Token

参数名 类型 必填 说明
Header Authorization Bearer access_token
字段名 类型 说明
success boolean 是否成功
user.sub string 平台用户唯一 ID,字符串形式
user.id integer 平台用户 ID
user.username string 用户名
user.nickname string 昵称
user.avatar string 头像地址
user.profile_url string 用户主页地址
user.is_banned boolean 账号是否被禁用
user.is_verified boolean 是否已认证
user.email string 仅授权 email scope 时返回
  • OAuth 用户信息接口不计费

提交评测任务

POST /api/judge/problem

JWT Bearer Token

参数名 类型 必填 说明
pid string 题目编号
lang string 评测语言(如 cpp11、cpp17 等)
code string 源代码
o2 boolean 是否开启 O2 优化(默认开启)
trackId string 跟踪 ID
字段名 类型 说明
success boolean 是否成功
requestId integer 评测请求 ID
  • 每次评测消耗 1 个计费点
  • 评测实际运行时间超过 10 秒,每超过 10 秒增加 1 个计费点,最多 10 个
  • 评测失败(无结果)不扣点

获取评测结果

GET /api/judge/result

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 本次实际扣除的计费点
coinDeducted number 本次实际扣除的金币
message string 评测失败时的提示信息
  • 查询评测结果计费(评测成功后只计费一次,失败不计费)

获取评测结果(长轮询)

GET /api/judge/result_polling

JWT Bearer Token

参数名 类型 必填 说明
requestId integer 评测请求 ID
字段名 类型 说明
success boolean 是否成功
requestId integer 评测请求 ID
status string 评测状态(如 Waiting, Accepted, WrongAnswer 等)
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 本次实际扣除的计费点
coinDeducted number 本次实际扣除的金币
message string 评测失败时的提示信息
  • 查询评测结果计费(评测成功后只计费一次,失败不计费)
字段名 类型 说明
compile object 编译结果
compile.status integer 编译状态
judge object 评测结果
judge.subtasks array 子任务列表
judge.subtasks[].cases array 测试点列表
judge.subtasks[].cases[].status integer 测试点状态
judge.subtasks[].cases[].result object 测试点详细结果
judge.subtasks[].cases[].result.type integer 结果类型
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 系统消息(如崩溃原因)