我正在设计一个组织群组和用户的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。
答案 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似乎更自然。