根据Roy Fielding的超媒体应用状态引擎(HATEOAS),每个资源都应该附有可以在该资源上完成的动作(或链接)列表。
如果操作包含在实体中(与使用Json-Schema的links属性相关),如何告知用户代理经过身份验证的用户无法使用特定选项?
后端可以进行过滤,但是根据经过身份验证的用户,相同的资源URL可以具有不同的表示形式。这看起来不像REST友好或缓存友好。
另一个选项是保留所有链接,并且当经过身份验证的用户无法使用该操作时,让用户代理接收403 Forbidden。这可能会让用户烦恼。
如果用户代理可以根据经过身份验证的用户进行更改,同时保持REST友好状态,如何通知用户代理可用的操作?
答案 0 :(得分:1)
你是对的。创建基于用户权限而变化的表示并不特别缓存友好。是否可以将权限变体分类为几个类别?例如资源安全性低,资源中等安全性资源高安全性
有时这种方法是可行的,有时则不然。要考虑的另一个方面是缓存是否对此特定资源至关重要。也许现在呢?
此外,没有必要等到用户点击链接以确定用户是否有权跟随它。客户端可以在后台链接上执行OPTIONS请求,以发现哪些链接可用,并动态禁用不可访问的链接。
这个问题没有单一的答案。根据要求,不同的解决方案可以在不同情况下使用。
答案 1 :(得分:0)
请考虑REST API是供机器人浏览的网站。
网站是否返回HTML资源(页面),其中包含您不允许查看的链接?
无论是否,它都不会改变网站的“超媒体”程度。
,但是根据经过身份验证的用户,相同的资源URL可能具有不同的表示形式
关于网站首页也应考虑同样的问题。资源是概念性的,主页是概念,它看起来像是更改。
网络如何处理已登录和已退出视图的页面缓存?
第一种方法是禁止对这些资源进行缓存;并非所有内容都必须是可缓存的,约束条件只是可以相应地标记资源。
第二个是使用控件语义,如果您使用HTTP作为REST API,则使用标头。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary