设计 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 端点,不再混淆!
我们有一个名为 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 端点,不再混淆!