我们有一个名为游戏和玩家的资源
/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
会有玩家玩的游戏,可以在游戏或玩家下标记
场景1
/games/me -> Fetches games played by the current logged in player
这会将请求分组在“游戏”标签下。我正在使用Swagger API,因此此调用将转到客户端生成的代码上的GamesAPI控制器。我认为它应该出现在Games api中,而不是与游戏相关的玩家中。
问题:将“我”视为特殊的ID似乎太奇怪了,因为它看起来是我无法消化的{game-id}的一种形式。
场景2
/players/me/games -> Fetches games played by the current logged in player
此代码将其分组在Player标记下,该标记在代码生成后进入PlayerAPI。路径具有很好的含义,但是与将其包含在GamesAPI中更相关(根据我的选择-我可能错了,请提出建议)
在这两种情况中,哪个是设计此问题的更好方法?
答案 0 :(得分:0)
场景1在两个场景中似乎更好一些,因为通常您的游戏网址将落入GameController,并且您可以在其中具有操作功能来获取所有游戏,具有给定ID的一个游戏或已登录用户的游戏。
答案 1 :(得分:0)
关系设计是由API设计架构的方式驱动的。因此,在您的情况下
1个玩家可以玩1个或很多游戏-因此, 1对多关系
因此,您应该根据玩家分组游戏数据。因此,有两种情况可以使API具有更好的性能
场景1
在“游戏”中搜索玩家ID并将其分组更容易吗?
场景2
根据游戏ID搜索玩家然后将其分组更容易吗?
从逻辑上讲,考虑场景1更有意义,因此
import re
for col in _ws.columns:
max_lenght = 0
print(col[0])
col_name = re.findall('\w\d', str(col[0]))
col_name = col_name[0]
col_name = re.findall('\w', str(col_name))[0]
print(col_name)
for cell in col:
try:
if len(str(cell.value)) > max_lenght:
max_lenght = len(cell.value)
except:
pass
adjusted_width = (max_lenght+2)
_ws.column_dimensions[col_name].width = adjusted_width
答案 2 :(得分:0)
这就是我解决的方法。
如方案1所述,我看到“我”与{game-id}发生冲突,并使用户感到困惑。 在方案2中,我发现从播放器API获取用户游戏并不直观。
因此,我采用了一种尝试使端点最小化的方法。 我为GET / games添加了一个新的查询参数“ playedOnly:boolean”,该参数返回与玩家相关的所有游戏。
这简化了很多事情。我仍然可以使用/ games终结点,而不会感到困惑!