如何在一个 REST API 请求中更新多个不同的实体?

How to update multiple different entities in one REST API request?

我有以下实体:GameTeamPlayerContract,具有以下关系:一个团队,有很多球员,有很多合同.团队也有很多游戏。 API 已经单独处理每个实体的标准 CRUD 操作,但我打算创建一个请求 insert/update 整棵树。方法如下:

它将是 insert/update Game 并且在 json 正文中(在比赛信息旁边)我将附上两个相应的球队,以及他们的球员和球员合同。一应俱全 json。在请求中,我将检查数据库,并可能检查 insert/update 个子实体(例如,如果团队不存在,我将插入它,否则更新它)。

我的问题:

  1. 对多个不同的实体进行批量请求是一种好做法吗?
  2. 方法类型应该是什么? POST 还是 PUT?
  3. return 状态应该是什么? (我觉得既然是交易,不是全好就是全失败,所以201比较合适,只是不确定,因为中间可能会有一些更新,所以想问一下)

谢谢!

PS。可选阅读:为什么?从客户端的角度来看,这是一个巨大的改进,因为有很多外键(特别是如果树变大,有统计等),API 可以在一个事务中完成所有这些。例如:当添加带有新团队、新球员和新合同的新游戏时,为了能够插入游戏,我需要球队的 FK,合同需要球员和球队的 FK。所以一个一个地做,我需要发送 POST 然后等待 returned FK,这样我就可以发送更多的请求。如果在此过程中出现问题,则还原所有更改时会出现问题。

这样做没有问题,其实很正常。

1 - 如果它是你的业务规则的一部分,那就去做吧,没有什么说它是错的,实际上是一个很好的做法,在一个请求中完成你需要的一切(排队,保存一堆的实体,无论如何),这避免了业务规则泄漏到 front-end 和额外的工作,例如在先前的请求出现任何问题时执行回退。

2 - 视情况而定,如果主要操作是添加内容,则 POST,否则 PUT 非常合适

3 - 如果你正在创建一个资源 201 是一个去,如果你正在更新一些东西,204-No Content(服务器处理了请求但是没有什么可以 return 给你)