我在寻找标准时遇到了问题,这种更新看起来如何。我有这个模型(简体)。请记住,Team
允许没有任何玩家,并且Team
最多可以有500位玩家:
public class Team
{
public int TeamId { get; set; }
public string Name { get; set; }
public string City { get; set; }
public List<Player> Players { get; set; }
}
public class Player
{
public int PlayerId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
和此端点:
部分球队更新(无球员):[PATCH] /api/teams/{teamId}
。为我提供了更新球队特定领域的选项,但没有球员。
更新团队(与玩家):[PUT] /api/teams/{teamId}
。在有效负载数据中,我将json
与整个Team
对象一起传递,包括玩家的集合。
仅更新播放器:[PUT] /api/teams/{teamId}/players/{playerId}
我开始怀疑我是否根本需要端点2。端点2的唯一优点是,我可以在一个请求中更新许多玩家。我也可以一次删除或添加许多玩家。所以我开始寻找任何标准,在现实世界中如何处理这种流行的情况?
我有两个选择:
PATCH
更改团队,而无法操纵Player
集合。 Player
集合只能由端点更改:[POST] /api/teams/{teamId}/players
[PUT] /api/teams/{teamId}/players/{playerId}
[DELETE] /api/teams/{teamId}/players/{playerId}
哪个选项是更好的做法?是否有一个标准的如何处理带有集合情况的实体?
谢谢。
本质上说POST是真正的附加动词。如果您不是真正在整体上更新播放器资源,则仅将另一个播放器追加到列表中。
我同意的主要论点是,PUT动词需要完整表示您要更新的内容。
另一方面,我将使用该补丁同时更新一堆资源。
没有真正错误或正确的方法。这取决于您在一天结束时如何查看域。
您可以进行批量操作,我当然可以在其中使用POST。虽然有些事情要考虑。
除了一些设计方面的考虑,如果您要使用多个插入件,则最好批量进行。如果一次是一对夫妇,请救自己和将要花费一些时间的人们,并一一对应。