我们正在使用以下资源构建REST API:Users,UserGroups。目前,我们正在支持以下URI:
/BASEAPI/VERSION/Users/
/BASEAPI/VERSION/Users/{id}/UserGroups
/BASEAPI/VERSION/UserGroups/
/BASEAPI/VERSION/UserGroups/{id}/Users
我比在对象中包含引用更好,然后必须在后续请求中提取引用。这也意味着我们可以避免查询参数来过滤结果。即我们不必支持:
/BASEAPI/VERSION/UserGroups/{id}?user_id={user_id}
问题在于它没有使创建和删除语义非常清晰。即应该发出DELETE请求:
/ BASEAPI / VERSION /用户/ {ID} /群组/ {GROUP_ID}
删除UserGroup,或从用户组中删除用户?
我们考虑过添加:
/ BASEAPI / VERSION / UserGroupUsers
但有些事情并不是很正确,但也许这是最好的选择。其他人认为最佳做法是什么?
答案 0 :(得分:1)
您需要弄清楚您打算如何表示用户和用户组之间的成员资格关系。它可以是用户的属性,组的属性或单独的资源。这是唯一的选择。如何将用户添加到组中以及从组中删除用户如何自然而然地脱离您的选择成员资格管理成为用户,组或成员资源的PUT / DELETE。
就个人而言,我发现单独的资源是处理问题的最简洁方法,但是您需要查询参数来轮询特定用户或组。此外,您需要更改第二级资源名称,因为/userGroups/{id}/users
返回userGroupUsers
资源集合没有任何意义。
答案 1 :(得分:1)
URL指向资源。此网址上的GET
会返回该资源,而DELETE
会将其删除。如果DELETE
会删除与GET
不同的内容,那么某些内容确实会被破坏。
因此,如果/BASEAPI/VERSION/Users/4711/UserGroups
将返回ID为0815和0816的UserGroup,则DELETE
应删除这两个userGroup。
问题是:这有意义吗?两个用户组中的其他用户发生了什么?
如果您要从群组中删除用户,我会提供PATCH
方法。