1

我正在设计一个组织组和用户的 REST 服务。

例如: GET /groups - 获取所有组 GET /groups/1 - 获取特定组 GET /groups/1/users - 获取组中的用户 GET /users/1 - 实际用户,可能有多个groups POST /groups/1/users - 使用 user_id=1 的 post 参数将用户添加到组

处理此问题的适当方法是什么?DELETE /groups/1/users/1 似乎是一种有效的方法,但是对同一 url 的 GET 将返回与资源 /user/1 重复的用户记录?

还是应该删除 /groups/1/users?user_id=1?

想知道这是最 RESTful 的方式来做到这一点。

4

1 回答 1

1

我认为一个好的设计会明确地表明用户在特定组中的成员身份——作为一个单独的资源。因此,组内有组、用户和用户的成员资格。

因此,GET /groups/1/users将返回成员资源标识符列表:/groups/1/users/{member_id}您可以在其上执行DELETE. 当然,这些“会员资格”中的每一个都与特定用户相关联,因此您必须以某种方式知道哪个member_id与哪个user_id. 最简单的方法是使member_id具有与 相同的语义user_id,正如您在问题中所建议的那样(因此/groups/1/users/1意味着“用户 1 在组 1 中的成员资格”)。之后,如果您执行 GET 操作,/groups/1/users/{member_id}您可以重定向到/users/{user_id}. 或者在一个更复杂的例子中,这个资源不会重定向到用户,而是链接到它,并且还包括一些其他信息,例如用户加入组的日期、她在组中的状态等。

我能想到的另一个选项是使用 PATCH 方法来修改集合资源(/groups/1/users):参见https://www.rfc-editor.org/rfc/rfc5023。但是使用 DELETE 似乎更自然。

于 2012-09-19T19:14:41.383 回答