设计 REST 时的多路径混淆 API

Multiple Paths confusion when designing REST API

我们有一个名为 Games and Players 的资源

/games -> Get all Games available

/games/{game-id} -> Get the game details of specific Game with game-id

/players/me -> Get logged in Player details

将有玩家玩的游戏,可以在游戏或玩家下标记


场景一

/games/me -> Fetches games played by the current logged in player

这会将请求分组到游戏标签下。我正在使用 Swagger API,因此此调用将转到客户端生成代码上的 GamesAPI 控制器。我认为参加比赛 api 比参加比赛更公平,因为这与比赛有关。

问题:将"me"视为特殊ID看起来太奇怪了,因为它看起来是{game-id}的一种形式,我不能文摘.


场景二

/players/me/games -> Fetches games played by the current logged in player

这将它分组在 Player 标签下,在代码生成后转到 PlayerAPI。该路径的含义很好,但是在游戏中更有意义API(我的选择-我可能错了,请提出建议)

在这两种情况中,哪种设计问题的方法更好?

场景 1 似乎是两种情况中更好的一种,因为一般来说,您的游戏 url 将登陆到 GameController 并且您可以在其中获取所有游戏、给​​定 ID 的一个游戏或已登录用户的游戏的操作功能游戏。

关系设计是由 API 架构的设计方式驱动的。因此,在您的情况下

1 名玩家可以玩 1 或许多游戏 - 所以 1 对多 关系

因此,您应该根据玩家对游戏数据进行分组。因此,API 有 2 种情况出现以获得更好的性能

场景一

在 Games 中搜索 player id 然后分组是否更容易?

场景二

根据Game id搜索Players然后分组是否更方便?

从逻辑上讲,考虑情景 1 更有意义,因此

/games/{player-id} -> Fetches games played by the current logged in player

我就是这样解决的。

如场景 1 所述,我发现 "me" 与 {game-id} 冲突并使用户感到困惑。 对于场景 2,我发现从玩家 API 获取用户游戏并不直观。

所以我采用了一种尝试将端点保持在最低限度的方法。 我为 GET /games 添加了一个新的查询参数 "playedOnly:boolean",其中 returns 所有与玩家相关的游戏。

这简化了很多事情。我仍然可以使用 /games 端点,不再混淆!