如何在依赖于经过身份验证的用户的情况下使用嵌入构建REST请求?

时间:2015-03-19 09:33:19

标签: rest restful-architecture

我有资源group; GET /groups/123返回:

{id:123, name: "My group"}

我也有小组成员; GET /groups/123/membersGET /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"}]}

用户相关字段的实际数量远远高于这两个字段(membersadmin),并且更难管理;这只是一个例子。

问题在于:GET /groups/123的结果现在将根据经过身份验证的用户的身份而有所不同。这使得管理它相当混乱(并且有点不RESTful)。例如:

  • “杰克”是管理员,他将获得admin:true并将看到所有成员
  • “Jill”不是管理员,她会获得admin:false(或undefined)而不会看到成员,或只看到公开的子集

如何构建我的网址/资源,以便请求始终 相同的数据 a 403被拒绝,因为用户没有对吧?

更新:

为了澄清一下,我可以看到如何修改网址或查询,例如: GET /groups/123?admin=true说,“让我得到管理员的东西”。问题是,我知道我是管理员直到我得到它。

当我拨打GET电话时,我当前的问题实际上是3个问题:

  • 给我组123信息
  • 检查我是否是管理员并将其标记
  • 如果我是管理员,请向我提供更多信息,例如会员

我可以将这些分成三个请求:

  1. GET /groups/123
  2. GET /groups/123/permissions/1(我是用户1)
  3. `GET / groups / 123 / adminFields(如果我是管理员)
  4. 但后来我有3个请求(可能还有更多)并失去了我的所有聚合优势。

1 个答案:

答案 0 :(得分:0)

关于此类问题已经存在疑问。请看这个链接:Different REST representations of same resource for different authenticated users

如果管理员或非管理员的返回表示结构不相同,我认为存在问题。

如果它们不同,则应添加其他资源以提供管理员的其他提示。

希望它可以帮到你, 亨利