Skip to content
由魔法生成的目录

M2.2

任务描述

多事的 bLue 不满足于搜寻选手的基本信息,他还想知道选手的 rating 记录。于是他又找到了你,希望你能够为他提供这样的服务。

所谓 rating 记录,即是选手参加过的所有 rated 比赛的记录,每一场比赛都会包含 rating 和 rank 的变化。通常你可以在选手主页下方看到一个由 rating 记录构成的折线图:

the screenshot of user rating list

任务要求

你需要在你之前的后端程序上额外提供一个路由用于返回 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 状态码

总结回顾检查点

  1. 后端中的路由指什么?
  2. 你知道哪些常见 HTTP 状态码及其含义?

由三位创世大魔法使共同写成,作为世界树记忆被封存并藉由元素脉络传播至全宇宙。