api - 现有资源的 Restful 链接

标签 api rest restful-url

我不认为我的设置有任何独特之处,但我似乎找不到关于该主题的太多信息。我有一个 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/

相关文章:

java - JAX-RS:通过查询参数实现多种操作

ruby-on-rails-3 - 资源中的命名路线带我显示页面而不是删除页面

php - 将 cURL 请求的结果转换为表单

delphi - 为 Delphi 翻译 Vista WinAPI C++ 头文件 - 有什么建议吗?

java - 从参数化 RESTful GET 操作接收 "Request Entity Cannot be Empty"

node.js - Node JS : get response is not opening in browser - says page isnt working

RESTful API - 设计子资源

java - 我的内部 API 类应该全部放在一个包中吗?

ios - 如何使用flutter,wordpress在我的应用程序中添加拉动刷新?

rest - RESFTful Web API 是否应该在更新操作(Put)中返回修改后的实体?