如何建模对资源上可见数据的限制?

时间:2012-02-10 12:51:26

标签: api rest

如何对资源上可见数据的限制进行建模?不同的人访问相同的资源但具有不同的角色,因此不允许他们查看所有信息。

我正在处理的案件:
没有信息访问限制的解决方案:

User:
  name
  phoneNumber

如果有人可以访问它,那么很容易建模为:

GET /User -> [{name:"John", phoneNumber: "322-333"}]
GET /User/{id} -> {name:"John", phoneNumber: "322-333"}

但是,我说我有两个角色,管理员和用户。只有同时也是管理员的用户才能看到phoneNumber。授权令牌以cookie,标题或类似方式传输。服务器将知道请求者具有哪些角色。如何设计API来处理这个?我有几个想法:

1)天真的解决方案是过滤它,如果你不允许访问它就离开字段,即。

If user: GET /User -> [{name:"John"}]
If admin: GET /User -> [{name:"John", phoneNumber: "322-333"}]

2)将角色嵌入网址:

If user is wanted as a User: GET /User/User -> [{name:"John"}]
If user is wanted as an Admin: GET /Admin/User -> [{name:"John", phoneNumber: "322-333"}]

3)为每个可能的字段子集定义新资源:

If user is wanted as a User:   GET /PublicUserInfo -> [{name:"John"}]
If user is wanted as an Admin: GET /FullUserInfo -> [{name:"John", phoneNumber: "322-333"}]

不同的方法会更好吗? 有没有人有实践解决方案的经验?

1 个答案:

答案 0 :(得分:0)

根据经过身份验证的用户使用选项1。如果您选择2或3个客户实施您的API,则必须担心任何API端点的两倍以及何时应该使用它们。