REST超媒体:是否应根据用户的权限过滤操作?

时间:2014-01-08 22:03:20

标签: rest permissions hateoas hypermedia

根据Roy Fielding的超媒体应用状态引擎(HATEOAS),每个资源都应该附有可以在该资源上完成的动作(或链接)列表。

如果操作包含在实体中(与使用Json-Schema的links属性相关),如何告知用户代理经过身份验证的用户无法使用特定选项?

后端可以进行过滤,但是根据经过身份验证的用户,相同的资源URL可以具有不同的表示形式。这看起来不像REST友好或缓存友好。

另一个选项是保留所有链接,并且当经过身份验证的用户无法使用该操作时,让用户代理接收403 Forbidden。这可能会让用户烦恼。

如果用户代理可以根据经过身份验证的用户进行更改,同时保持REST友好状态,如何通知用户代理可用的操作?

2 个答案:

答案 0 :(得分:1)

你是对的。创建基于用户权限而变化的表示并不特别缓存友好。是否可以将权限变体分类为几个类别?例如资源安全性低,资源中等安全性资源高安全性

有时这种方法是可行的,有时则不然。要考虑的另一个方面是缓存是否对此特定资源至关重要。也许现在呢?

此外,没有必要等到用户点击链接以确定用户是否有权跟随它。客户端可以在后台链接上执行OPTIONS请求,以发现哪些链接可用,并动态禁用不可访问的链接。

这个问题没有单一的答案。根据要求,不同的解决方案可以在不同情况下使用。

答案 1 :(得分:0)

请考虑REST API是供机器人浏览的网站。

网站是否返回HTML资源(页面),其中包含您不允许查看的链接?

无论是否,它都不会改变网站的“超媒体”程度。

  

,但是根据经过身份验证的用户,相同的资源URL可能具有不同的表示形式

关于网站首页也应考虑同样的问题。资源是概念性的,主页是概念,它看起来像是更改。

网络如何处理已登录和已退出视图的页面缓存?

第一种方法是禁止对这些资源进行缓存;并非所有内容都必须是可缓存的,约束条件只是可以相应地标记资源。

第二个是使用控件语义,如果您使用HTTP作为REST API,则使用标头。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary