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

Web services 处理从REST组中删除成员的正确方法,web-services,rest,Web Services,Rest,我正在设计一个REST服务来组织组和用户 例如: 获取/组-获取所有组 GET/groups/1-获取特定组 GET/groups/1/users-获取组中的用户 GET/users/1-实际用户,可能在多个组中 POST/groups/1/users-使用user_id=1的POST参数将用户添加到组中 处理这个问题的适当方法是什么? DELETE/groups/1/users/1似乎是一种有效的方法,但是,访问同一url将返回与资源/user/1重复的用户记录 还是应该是DELETE/gro

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

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

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

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


想知道哪种方式是最RESTful的方式。

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

因此,
GET/groups/1/users
将返回成员资格资源标识符的列表:
/groups/1/users/{member\u id}
,您可以对其执行
删除操作。当然,这些“成员身份”中的每一个都与特定的用户相关联,因此您必须知道哪个
成员id
与哪个
用户id
相关联。最简单的方法是使
成员id
具有与
用户id
相同的语义,正如您在问题中所建议的那样(因此
/groups/1/users/1
表示“用户1在组1中的成员身份”)。接下来,如果你做了一个关于
/groups/1/users/{member\u id}
的测试,你可以重定向到
/users/{user\u id}
。或者在更复杂的示例中,此资源不会重定向到用户,而是链接到该用户,还包括一些其他信息,例如用户加入组的日期、她在组中的状态等


我能想到的另一个选项是利用补丁方法修改集合资源(
/groups/1/users
):请参阅。但是使用DELETE似乎更为自然。

我认为一个好的设计会将某个用户在特定组中的成员身份作为一个单独的资源明确显示出来。因此,在一个组中有组、用户和用户的成员资格

因此,
GET/groups/1/users
将返回成员资格资源标识符的列表:
/groups/1/users/{member\u id}
,您可以对其执行
删除操作。当然,这些“成员身份”中的每一个都与特定的用户相关联,因此您必须知道哪个
成员id
与哪个
用户id
相关联。最简单的方法是使
成员id
具有与
用户id
相同的语义,正如您在问题中所建议的那样(因此
/groups/1/users/1
表示“用户1在组1中的成员身份”)。接下来,如果你做了一个关于
/groups/1/users/{member\u id}
的测试,你可以重定向到
/users/{user\u id}
。或者在更复杂的示例中,此资源不会重定向到用户,而是链接到该用户,还包括一些其他信息,例如用户加入组的日期、她在组中的状态等

我能想到的另一个选项是利用补丁方法修改集合资源(
/groups/1/users
):请参阅。但使用DELETE似乎更自然