如何通过 REST API 放置多个资源

时间:2021-02-11 15:52:27

标签: json api rest http

我正在尝试找出通过 REST API 将多个用户添加到组的最佳方式。

现在,我认为这是一次添加一个用户的最佳方式:

PUT /groups/123/{userID}

然后,从组中删除用户:

DELETE /groups/123/{userID}

但是我如何将多个用户同时添加到组中?这是最好的方法吗?

PUT /groups/123

作为数组的内容主体:

[
  "user1",
  "user2",
  "user3"
]

...并且要从群组中删除用户,我会通过 DELETE 请求执行相同的操作。

这种设置有什么“错误”吗,或者有没有更好、更“行业标准”的方式来做到这一点?

1 个答案:

答案 0 :(得分:0)

<块引用>

如何通过 REST API 放置多个资源

你不这样做 - HTTP 中的每个请求都有一个且恰好一个目标 resource; PUT 请求的语义是请求的消息体是资源的替代表示。


资源是文档的概括。

拥有一份代表某个组成员的文档是完全合理的。

PUT /groups/123

[
  "user1",
  "user2",
  "user3"
]

这个请求意味着是“用这个副本替换你的/groups/123副本”。它纯粹是一个文档编辑命令。

有用的工作 - 就像实际更改主组成员列表一样,是一个副作用,使您的文档副本看起来像提供的副本。见Webber 2011

在这种风格中,从组中“删除”一个用户看起来就像是对 /groups/123 文档的另一次编辑

PUT /groups/123

[
  "user1",
  "user3"
]

当然,远程创作语义不是必需的;你可以这样做:

POST /groups/123

Please remove user1

POST /groups/123

action=addUser&id=user4

<块引用>

要从组中删除用户,我会通过 DELETE 请求执行相同的操作

小心 - DELETE(如 PUT)表示 HTTP 中的特定内容,这可能不是您的意思。

<块引用>

允许使用 DELETE 方法的资源相对较少

DELETE 的语义完全属于 transfer documents over a network 域,而不属于“管理用户和组”域。

相关问题