我不认为我的设置有任何独特之处,但我似乎找不到关于该主题的太多信息。我有一个 User
实体。一个用户可以有多个角色
。角色是系统中预定义的实体,客户端不能创建新角色。但是,客户端可以向 User
添加或删除 Roles
。我对如何实现将 Role
链接到 User
有一些想法,但我不确定哪个是最佳选择。
GET/users/1/roles
返回如下集合:
[
{
"id":1,
"name": "ACTIVE_USER"
},
{
"id":2,
"name": "ADMIN"
}
]
这是我到目前为止考虑过的选项
1。 body中的roleId
POST/users/1/roles
{
"roleId":1
}
2。 url中的角色id
POST/users/1/roles/1
3。单独的用户角色端点
POST/用户角色
{
"userId":1,
"roleId":1
}
4。与 GET/roles
返回相同的格式
POST/user/1/roles
{
"id":1
}
最佳答案
The roles are pre-defined entities in the system and the client cannot create new roles
我会反对您的任何选择,因为它们都执行 POST 请求。
请记住,角色是预定义的,您不是在创建新角色,因此 POST 请求不合适。
相反,由于每个用户都有一个角色列表(可能是也可能不是空列表),我会简单地执行 PATCH 请求以使用新角色更新该角色列表。请记住 PUT 是创建/替换,PATCH 是“更新”
一种可能的情况是您可以添加和删除用户的角色。所以我建议您在请求正文中添加一个操作参数:
PATCH /users/1
[
{"action": "add", "path": "/roles", "roleId": 1}
]
为用户添加角色。要删除,您自然会将 add
替换为 remove
。
参见 this page如果你好奇 {"action": "add", "path": "/roles", "roleId": 1}
的用法从何而来
关于api - 现有资源的 Restful 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446128/