Restful 链接现有资源
Restful linking of existing resources
我不认为我的设置有任何独特之处,但我似乎找不到关于该主题的太多信息。我有一个 User
实体。一个用户可以有多个Roles
。角色是系统中预定义的实体,客户端不能创建新角色。但是,客户端可以在 User
中添加或删除 Roles
。我对如何实现将 Role
链接到 User
有一些想法,但我不确定哪个是最佳选择。
GET /users/1/roles
returns 像这样的集合:
[
{
"id":1,
"name": "ACTIVE_USER"
},
{
"id":2,
"name": "ADMIN"
}
]
以下是我目前考虑过的选项
1。正文中的 roleId
POST /users/1/roles
{
"roleId":1
}
2。 url
中的角色 ID
POST /users/1/roles/1
3。单独的用户角色端点
POST /user-roles
{
"userId":1,
"roleId":1
}
4。格式与 GET /roles
returns
相同
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 是 create/replace,PATCH 是 "update"
一种可能的情况是您可以添加和删除用户的角色。所以我建议你在请求体中添加一个动作参数:
PATCH /users/1
[
{"action": "add", "path": "/roles", "roleId": 1}
]
为用户添加角色。要删除,您自然会用 remove
.
替换 add
如果您想知道 {"action": "add", "path": "/roles", "roleId": 1}
的用法来自何处,请参阅 this page
我不认为我的设置有任何独特之处,但我似乎找不到关于该主题的太多信息。我有一个 User
实体。一个用户可以有多个Roles
。角色是系统中预定义的实体,客户端不能创建新角色。但是,客户端可以在 User
中添加或删除 Roles
。我对如何实现将 Role
链接到 User
有一些想法,但我不确定哪个是最佳选择。
GET /users/1/roles
returns 像这样的集合:
[
{
"id":1,
"name": "ACTIVE_USER"
},
{
"id":2,
"name": "ADMIN"
}
]
以下是我目前考虑过的选项
1。正文中的 roleId
POST /users/1/roles
{
"roleId":1
}
2。 url
中的角色 IDPOST /users/1/roles/1
3。单独的用户角色端点
POST /user-roles
{
"userId":1,
"roleId":1
}
4。格式与 GET /roles
returns
相同
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 是 create/replace,PATCH 是 "update"
一种可能的情况是您可以添加和删除用户的角色。所以我建议你在请求体中添加一个动作参数:
PATCH /users/1
[
{"action": "add", "path": "/roles", "roleId": 1}
]
为用户添加角色。要删除,您自然会用 remove
.
add
如果您想知道 {"action": "add", "path": "/roles", "roleId": 1}
的用法来自何处,请参阅 this page