我有资源group
; GET /groups/123
返回:
{id:123, name: "My group"}
我也有小组成员; GET /groups/123/members
或GET /members?group=123
:
[{id:201,name:"Jack"},{id:202,name:"Jill"}]
为了提高效率,我将下级数据聚合到GET /groups/123
请求中,以及当前用户对该组的权限:
{id:123,name:"My group",admin:true,members:[{id:201,name:"Jack"},{id:202,name:"Jill"}]}
用户相关字段的实际数量远远高于这两个字段(members
和admin
),并且更难管理;这只是一个例子。
问题在于:GET /groups/123
的结果现在将根据经过身份验证的用户的身份而有所不同。这使得管理它相当混乱(并且有点不RESTful)。例如:
admin:true
并将看到所有成员admin:false
(或undefined
)而不会看到成员,或只看到公开的子集如何构建我的网址/资源,以便请求始终 相同的数据或 a 403
被拒绝,因为用户没有对吧?
更新:
为了澄清一下,我可以看到如何修改网址或查询,例如: GET /groups/123?admin=true
说,“让我得到管理员的东西”。问题是,我知道我是管理员直到我得到它。
当我拨打GET
电话时,我当前的问题实际上是3个问题:
我可以将这些分成三个请求:
GET /groups/123
GET /groups/123/permissions/1
(我是用户1)但后来我有3个请求(可能还有更多)并失去了我的所有聚合优势。
答案 0 :(得分:0)
关于此类问题已经存在疑问。请看这个链接:Different REST representations of same resource for different authenticated users。
如果管理员或非管理员的返回表示结构不相同,我认为存在问题。
如果它们不同,则应添加其他资源以提供管理员的其他提示。
希望它可以帮到你, 亨利