用于在不影响REST中的子资源的情况下更新资源的正确HTTP方法

oia*_*kyi 3 api rest web-services

假设我有两个实体 - 项目团队和员工.每个员工都可以成为多个团队的一员,每个团队可以拥有多名员工作为团队成员.我需要提供REST API来操纵团队,员工和他们之间的关系.

我已经确定了3个资源 - 团队,员工和成员(团队和员工之间的关联),这是团队的子资源.我选择将成员作为子资源的原因完全基于此资源的生命周期.每当团队被移除时,成员都会被移除,并且他们在团队之外没有任何意义.

我公开了以下API(相关的):

  • POST /teams 使用姓名,部门ID等创建新的团队记录.
  • POST /teams/{name}/members 创建由名称和特定员工标识的团队之间的关联,因此输入数据包含员工ID

我还需要提供API以在一个请求中更新团队ID和团队的其他属性.看起来像PUT是自然的选择,但PUT的语义非常清楚 - 我必须替换整个资源,在这种情况下,也意味着替换所有成员子资源.

当我只想在保留成员关联的同时更新团队的属性时,我应该使用什么方法(或方法)?请记住,我也希望此请求是幂等的.

Dar*_*ler 5

看起来像PUT是自然的选择,但PUT的语义非常清楚 - 我必须替换整个资源,在这种情况下,也意味着替换所有成员子资源.

我以前从未听说过有人建立这种联系.如果PUT /Foo 我认为它完全没有说明/Foo/bar.仅仅因为可以通过层级URI空间访问资源,不会推断这些资源之间的任何其他关系.

我听说有人在做相反的情况,PUT /Foo/bar如果服务器知道这会影响状态,/Foo你可以包含一个Content-Location标头,指向/Foo允许智能缓存无效/Foo.但是,需要Content-Location来显式创建两个资源之间的关系.

  • @Oleg可以从PUT请求体中安全地省略不受客户端控制的表示的元素,例如超媒体链接. (2认同)