如何通过 REST 调用将资源 A 映射到资源 B?
How to map resource A to resource B via REST call?
我有 2 个 Many-To-Many
相关的资源。
一个资源是 users
,另一个是 roles
。 user
可以分配不同的 roles
,而 role
可以分配不同的 users
。
/users
将 return 所有用户
/roles
将 return 所有角色
Many-To-Many
关系允许我使用以下资源路径:
/users/1/roles
将 return 所有角色分配给 ID 为 1 的用户
/roles/1/users
将 return 所有用户分配给 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 的方式完成的?
我将使用 PUT
动词,因为您正在更新分配给您的用户的角色。
但我更喜欢使用请求正文来指定我想分配给该用户的完整角色列表。
PUT /users/1/roles (list of assigned Role objects as request body)
POST
动词,如你所说,一般用于创建新对象。
此外,还有一些我认为有用的同事建议:RESTful APIs from Scratch: Lessons Learnt (so far)
我有 2 个 Many-To-Many
相关的资源。
一个资源是 users
,另一个是 roles
。 user
可以分配不同的 roles
,而 role
可以分配不同的 users
。
/users
将 return 所有用户/roles
将 return 所有角色
Many-To-Many
关系允许我使用以下资源路径:
/users/1/roles
将 return 所有角色分配给 ID 为 1 的用户
/roles/1/users
将 return 所有用户分配给 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 的方式完成的?
我将使用 PUT
动词,因为您正在更新分配给您的用户的角色。
但我更喜欢使用请求正文来指定我想分配给该用户的完整角色列表。
PUT /users/1/roles (list of assigned Role objects as request body)
POST
动词,如你所说,一般用于创建新对象。
此外,还有一些我认为有用的同事建议:RESTful APIs from Scratch: Lessons Learnt (so far)