判题服务器 API

总述

对 API 的一些说明

1) URL 路径代表一种资源,只能为名词,推荐使用复数,不能为动词,请求方法已经表达动作意义。

2) URL 路径不能使用大写,单词如果需要分隔,统一使用下划线。

3) GET:从服务器取出资源。

4) POST:在服务器新建一个资源。

5) PUT:在服务器更新资源。

6) DELETE:从服务器删除资源。

错误码

00000: 一切正常
A0001: 用户错误
A0002: 用户表单错误
A0003: 用户名或密码错误
A0004: 权限错误
A0005: 不支持的判题偏好
A0006: 请求内容为空
B0001: 服务器错误
B1002: 找不到文件依赖
B1003: 找不到文件
B1004: 判题需求文件下载失败
B1005: 判题服务器负载已满
B1006: 当前有任务正在进行中, 无法修改
B1007: 文件不存在

其他的一些注意事项

1) 体验 api 的baseUrl47.106.202.255:8080, 可以调取此接口来测试,但是不保证此接口长期有效,建议自行部署判题机服务。 2) 文档提供了【A+B Problem】的四种语言代码请求方式,其中,服务端响应的信息在java的版本中可以找到,其他的版本将被略去

参考资料

  • 阿里巴巴 Java 开发手册(嵩山版)

接口详情

执行判题 -- A + B Problem(JAVA)

请求 URL:

  • 47.106.202.255:8080/judge/result

请求方式:

  • POST

请求参数示例

{
"language": "JAVA",
"solutions": [
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
},
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
}
],
"submissionCode":"import java.util.Scanner;\n\npublic class Main {\n public static void main(String[] args) {\n Scanner in = new Scanner(System.in);\n int a = in.nextInt();\n int b = in.nextInt();\n System.out.println(a + b);\n }\n}",
"judgePreference": "OI",
"memoryLimit":30000,
"outputLimit": 10000
}
返回示例
{
"judgeResults": [
{
"realTimeCost": "112",
"memoryCost": "26404",
"cpuTimeCost": "104",
"condition": 0,
"stdInPath": "/home/judgeEnvironment/resolutions/e11a6dc4-b882-4e18-9ea5-8f9582fc4a60/solution.in",
"stdOutPath": "/home/judgeEnvironment/submissions/c4154a3e-4105-445c-84e4-dd92d4086f2b/running_0.out",
"stdErrPath": "/home/judgeEnvironment/submissions/c4154a3e-4105-445c-84e4-dd92d4086f2b/running_0.err",
"message": "ACCEPT"
},
{
"realTimeCost": "131",
"memoryCost": "29028",
"cpuTimeCost": "119",
"condition": 0,
"stdInPath": "/home/judgeEnvironment/resolutions/e11a6dc4-b882-4e18-9ea5-8f9582fc4a60/solution.in",
"stdOutPath": "/home/judgeEnvironment/submissions/c4154a3e-4105-445c-84e4-dd92d4086f2b/running_1.out",
"stdErrPath": "/home/judgeEnvironment/submissions/c4154a3e-4105-445c-84e4-dd92d4086f2b/running_1.err",
"message": "ACCEPT"
}
],
"submissionId": "c4154a3e-4105-445c-84e4-dd92d4086f2b",
"judgeEndTime": 1599143354314,
"extraInfo": []
}
返回参数说明
参数类型描述
judgeResultsarray判题结果合集列表
realTimeCoststring消耗时间
memoryCoststring消耗内存
cpuTimeCoststring消耗 cpu 时间
conditionnumber判题结果
stdInPathstring判题服务器上的标准输入路径
stdOutPathstring判题服务器上的标准输出路径
stdErrPathstring判题服务器上的标准错误路径
messagestring判题结果描述, 例如 [ACCEPT],表示通过
submissionIdstring本次提交的 id
judgeEndTimenumber本次判题完成的时间
extraInfoobject额外信息(当前为编译器输出信息)

执行判题 -- A + B Problem(C)

请求 URL:

  • 47.106.202.255:8080/judge/result

请求方式:

  • POST

请求参数示例

{
"language": "C",
"solutions": [
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
},
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
}
],
"submissionCode": "#include<stdio.h>\nint main(void)\n{\n int a, b;\n scanf(\"%d %d\", &a, &b);\n printf(\"%d\", a + b);\n return 0;\n}",
"judgePreference": "OI",
"memoryLimit": 10000,
"outputLimit": 100,
"cpuTimeLimit":100
}
  • 返回参数以及更多的细节内容见【执行判题 -- A + B Problem(JAVA)】

执行判题 -- A + B Problem(C_PLUS_PLUS)

请求 URL:

  • 47.106.202.255:8080/judge/result

请求方式:

  • POST

请求参数示例

{
"language": "C_PLUS_PLUS",
"solutions": [
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
},
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
}
],
"submissionCode": "#include<stdio.h>\nint main(void)\n{\n int a, b;\n scanf(\"%d %d\", &a, &b);\n printf(\"%d\", a + b);\n return 0;\n}",
"judgePreference": "OI",
"outputLimit": 100
}
  • 返回参数以及更多的细节内容见【执行判题 -- A + B Problem(JAVA)】

执行判题 -- A + B Problem(PYTHON)

请求 URL:

  • 47.106.202.255:8080/judge/result

请求方式:

  • POST

    请求参数示例

{
"language": "PYTHON",
"solutions": [
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
},
{
"stdIn": "http://cdn.yuzzl.top/1596680709217.in",
"expectedStdOut": "http://cdn.yuzzl.top/1596680709217.out"
}
],
"submissionCode": "raw = input()\nprint(sum(map(int, raw.split())))",
"judgePreference": "OI",
"memoryLimit": 65536,
"outputLimit": 1000000
}
  • 返回参数以及更多的细节内容见【执行判题 — A + B Problem(JAVA)】

连接测试, 并获取基本信息

请求 URL:

  • 47.106.202.255:8080/common/connection_test

请求方式:

  • GET
返回示例
{
"code": "00000",
"message": "judgeHost运行正常",
"request": null,
"data": {
"workPath": null,
"scriptPath": "/home/judgeEnvironment/scripts",
"resolutionPath": "/home/judgeEnvironment/resolutions",
"port": 8080,
"workingAmount": 0,
"cpuCoreAmount": 8,
"memoryCostPercentage": 85,
"cpuCostPercentage": 10,
"queueAmount": 0,
"maxWorkingAmount": 8,
"version": "V1.0.0"
}
}
返回参数说明
参数类型描述
workPathobject判题工作目录
scriptPathstring判题脚本目录
resolutionPathstring解决方案(正确测试点)目录
portnumber判题机端口
workingAmountnumber当前工作数目
cpuCoreAmountnumber判题机 cpu 核心数目
memoryCostPercentagenumber内存消耗百分比
cpuCostPercentagenumbercpu 消耗百分比
queueAmountnumber判题机等候判题队列最大数目
maxWorkingAmountnumber判题机最大工作数目
versionstring判题机版本号

清空解决方案目录

请求 URL:

  • 47.106.202.255:8080/file/solution_path

请求方式:

  • DELETE
返回示例
{
"code": "00000",
"message": "删除成功",
"request": null,
"data": null
}

清空提交目录

请求 URL

  • 47.106.202.255:8080/file/submission_path

请求方式:

  • DELETE
返回示例
{
"code": "00000",
"message": "删除成功",
"request": null,
"data": null
}

下载某个提交

请求 URL

  • 47.106.202.255:8080/file/{submissionId}

请求方式:

  • DELETE

下载文件描述

result // 压缩包名称,为submissionId
├─ build.sh // 编译脚本
├─ compile.err // 编译错误输出
├─ compile.out // 编译输出
├─ Main.c // 代码文件
├─ run // 运行脚本
├─ running_0.err // 运行错误输出(表示第0个测试点)
├─ running_0.out // 运行输出(表示第0个测试点)
├─ running_1.err // 运行错误输出(表示第1个测试点)
└─ running_1.out //运行输出(表示第1个测试点)

获取判题服务器接口调用凭据

请求 URL
  • /auth/access_token
请求方式
  • POST
参数
参数类型描述
userIdstring用户名
userSecretstring密码
返回示例
{
"accessToken":"判题服务器接口调用凭据将显示在这里",
"expiresIn": 14400
}
返回参数说明
参数类型描述
accessTokenstring判题服务器接口调用凭据
expiresInnumber有效期,单位为秒

验证判题服务器接口调用凭据

请求 URL

请求 URL
  • /auth/examination
请求方式
  • POST
参数
参数类型描述
accessTokenstring判题服务器接口调用凭据
返回示例
{
"code": "00000",
"message": "ACCESS_TOKEN_PASS!",
"request": null,
"data": null
}
返回参数说明
参数类型描述
messagestring通过则显示ACCESS_TOKEN_PASS!