M2.2
任务描述
多事的 bLue 不满足于搜寻选手的基本信息,他还想知道选手的 rating 记录。于是他又找到了你,希望你能够为他提供这样的服务。
所谓 rating 记录,即是选手参加过的所有 rated 比赛的记录,每一场比赛都会包含 rating 和 rank 的变化。通常你可以在选手主页下方看到一个由 rating 记录构成的折线图:
任务要求
你需要在你之前的后端程序上额外提供一个路由用于返回 rating 记录。这样,你的后端程序可以通过不同路由来提供不同的接口功能。
原先的选手信息需要被重命名至 /batchGetUserInfo
路由,URL 格式为:http://127.0.0.1:2333/batchGetUserInfo?handles={handles}
。
新增的 rating 记录为单用户查询接口,使用 /getUserRatings
路由,URL 格式为:http://127.0.0.1:2333/getUserRatings?handle={handle}
。
响应格式
handle 可以查询到
状态码:200。
响应内容类型:JSON。
响应体的数据结构是一个数组,每一项的结构定义为:
typescript
{
handle: string;
contestId: number;
contestName: string;
rank: number;
ratingUpdatedAt: Date;
oldRating: number;
newRating: number;
}
TIP
其中 Date 指时间,需要以标准 ISO8601 时间字符串形式返回
handle 无法找到
状态码:404。
响应内容类型:JSON。
响应体的数据结构定义为:
typescript
{
message: 'no such handle';
}
其他异常情况
状态码:根据异常类型自定义。
响应内容类型:JSON。
响应体的数据结构定义为:
typescript
{
message: string;
}
请求示例
示例 1
请求 URL(GET):
txt
http://127.0.0.1:2333/getUserRatings?handle=Sanya161616
状态码:200。
响应体:
json
[
{
"handle": "Sanya161616",
"contestId": 1183,
"contestName": "Codeforces Round 570 (Div. 3)",
"rank": 2825,
"ratingUpdatedAt": "2019-06-27T00:50:00+08:00",
"oldRating": 0,
"newRating": 1446
},
{
"handle": "Sanya161616",
"contestId": 1795,
"contestName": "Educational Codeforces Round 143 (Rated for Div. 2)",
"rank": 4099,
"ratingUpdatedAt": "2023-02-17T00:35:00+08:00",
"oldRating": 1446,
"newRating": 1414
}
]
示例 2
请求 URL(GET):
txt
http://127.0.0.1:2333/getUserRatings?handle=nnnnnn123
状态码:404。
响应体:
json
{
"message": "no such handle"
}
建议完成用时
1 天。
自学参考资料关键词
- 路由
- HTTP 状态码
总结回顾检查点
- 后端中的路由指什么?
- 你知道哪些常见 HTTP 状态码及其含义?