【发布时间】:2018-03-15 15:32:21
【问题描述】:
我有 2 个与 Many-To-Many 相关的资源。
一种资源是users,另一种是roles。 user 可以分配不同的roles,而role 可以分配不同的users。
-
/users将返回所有用户 -
/roles将返回所有角色
Many-To-Many 关系允许我使用以下资源路径:
-
/users/1/roles将返回分配给 id 为 1 的用户的所有角色 -
/roles/1/users将返回分配给 id 为 1 角色的所有用户
现在假设我想将 id 为 2 的角色分配给 id 为 1 的用户。
我有两个不同的想法:
PUT /users/1/roles/2 (No request body, as no use)。这种方法将非常易读并且显然是幂等的。我也不期待回应。但是不发送带有 PUT 请求的请求正文似乎很奇怪。POST /users/1/roles (Role object as request body)这种方法在技术上似乎更正确。但我想映射一个已经存在的角色并不明显。我似乎为这个用户创建了一个角色。此外,将已经存在的角色附加到请求中似乎非常无用。BadRequest因为我尝试添加一个不存在的角色,所以会非常混乱。
在我看来,两者实际上都不太正确......
这是如何以可理解的 REST 一致性方式完成的?
【问题讨论】: