处理从REST中的组中删除成员的正确方法

时间:2012-09-19 16:57:55

标签: web-services rest

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

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

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

或应该是DELETE / groups / 1 / users?user_id = 1?

想知道哪种方式最RESTful。

1 个答案:

答案 0 :(得分: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组中的成员资格” )。接下来,如果您在/groups/1/users/{member_id}上进行GET,则可以重定向到/users/{user_id}。或者在一个更复杂的示例中,此资源不会重定向到用户,而是链接到该用户,还包括一些其他信息,例如用户加入组的日期,她在组中的状态等等。

我能想到的另一个选项是利用PATCH方法修改集合资源(/groups/1/users):参见http://tools.ietf.org/html/rfc5023。但是使用DELETE似乎更自然。