2012-09-19 53 views
1

我正在设计一个组织组和用户的REST服务。正确的方法来处理从REST组中删除成员

例如: GET /组 - 得到所有组 GET /基团/ 1 - 获取特定组 GET /基团/ 1 /用户 - 获取用户的组 GET /用户/ 1 - 的实际用户,可能在多个组中 POST /组/ 1 /用户 - 使用user_id = 1的发布参数将用户添加到组

什么是适当的方式来处理此问题? 删除/组/ 1 /用户/ 1似乎是一种有效的方式来做到这一点,但然后GET到相同的网址将返回资源/用户/ 1的重复的用户记录?

或应该是DELETE/groups/1/users?user_id = 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中的成员身份”)。之后,如果您在/groups/1/users/{member_id}上进行GET,则可以重定向至/users/{user_id}。或者在一个更复杂的例子中,这个资源不会重定向到用户,而是链接到它,并且还包括一些其他信息,例如用户加入组的日期,她在组中的状态等。我能想到的其他选项将使用PATCH方法来修改收集资源(/groups/1/users):请参阅http://tools.ietf.org/html/rfc5023。但使用DELETE似乎更自然。

相关问题