假设我有两个实体 - 项目团队和员工。每个员工可以是多个团队的一部分,每个团队可以有多个员工作为团队成员。我需要提供 REST API 来操纵团队、员工以及他们之间的关系。
我已经确定了 3 种资源 - 团队、员工和成员(团队和员工之间的关联),这是团队的子资源。我选择将 member 作为子资源的原因纯粹是基于该资源的生命周期。每当团队被移除时,成员也会被移除,而且他们在团队之外没有任何意义。
我公开了以下 API(相关的):
POST/teams
创建带有名称、部门 ID 等的新团队记录POST/teams/{name}/members
在由名称标识的团队和特定员工之间创建关联,因此输入数据包含员工 ID
我还需要提供 API 以在一次请求中更新团队的部门 ID 和其他属性。看起来 PUT 是自然选择,但 PUT 的语义非常清楚——我必须替换整个资源,在这种情况下意味着替换所有成员子资源。
当我只想更新团队的属性同时保留成员关联时,我应该使用什么方法(或方法)?请记住,我也希望这个请求是幂等的。
最佳答案
Looks like PUT is natural choice but semantics of PUT is pretty clear - I have to replace whole resource, which in this case means replacing all members sub-resources as well.
我以前从未听说过有人建立这种联系。如果执行 PUT/Foo
在我看来它绝对没有说明 /Foo/bar
。仅仅因为可以通过分层 URI 空间访问资源并不能推断出这些资源之间的任何其他关系。
我听说有人在做相反的场景,你做 PUT/Foo/bar
如果服务器知道这会影响 /Foo
的状态,你可以包含指向 /Foo
的 Content-Location header ,以允许智能缓存使 /Foo
无效。但是,需要 Content-Location 来显式创建两个资源之间的关系。
关于web-services - 在不影响 REST 子资源的情况下更新资源的正确 HTTP 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246442/