宁静地连接现有资源

时间:2015-09-07 21:15:26

标签: api rest restful-url

我不认为我的设置有任何独特之处,但我似乎无法找到有关该主题的更多信息。我有一个User实体。用户可以拥有多个Roles。角色是系统中的预定义实体,客户端无法创建新角色。但是,客户可以在Roles中添加或删除User。关于如何实现RoleUser的链接,我有一些想法,但我不确定哪个是最佳选择。

GET /users/1/roles返回如下集合:

[
  {
    "id":1,
    "name": "ACTIVE_USER"
  },
  {
    "id":2,
    "name": "ADMIN"
  }
]

以下是我到目前为止所考虑的选项

1。 bodyId in body

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相同

POST /user/1/roles

{
  "id":1        
}

1 个答案:

答案 0 :(得分:1)

  

角色是系统中的预定义实体,客户端无法创建新角色

我会建议您不要选择任何选项,因为他们都会发出POST请求。

请记住,角色是预定义的,您没有创建新角色,因此POST请求不合适。

相反,由于每个用户都有一个角色列表(可能是也可能不是空列表),我只需要执行一个PATCH请求来更新具有新角色的角色列表。记住PUT是创建/替换,PATCH是"更新"

可能的情况是您可以添加和删除用户的角色。因此,我建议您在请求正文中添加一个操作参数:

PATCH /users/1

[
  {"action": "add", "path": "/roles", "roleId": 1}
]

向用户添加角色。要删除您,请自然将add替换为remove

如果您对{"action": "add", "path": "/roles", "roleId": 1}的使用来自

感到好奇,请参阅this page