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

REST超媒体:是否应根据用户过滤操作';s的权限?,rest,permissions,hateoas,hypermedia,Rest,Permissions,Hateoas,Hypermedia,根据罗伊·菲尔丁(Roy Fielding)的超媒体作为应用程序状态引擎(HATEOAS),每个资源都应该附带一个可以在该资源上执行的操作(或链接)列表 如果操作包含在实体中(与使用Json模式的links属性类似),我如何告诉用户代理特定的选项对经过身份验证的用户不可用 后端可以进行过滤,但是同一个资源URL可能具有不同的表示形式,具体取决于经过身份验证的用户。而且这似乎不利于REST或缓存 另一个选项是保留所有链接,并在认证用户无法使用该操作时让用户代理接收403禁止。这可能会让用户感到恼火

根据罗伊·菲尔丁(Roy Fielding)的超媒体作为应用程序状态引擎(HATEOAS),每个资源都应该附带一个可以在该资源上执行的操作(或链接)列表

如果操作包含在实体中(与使用Json模式的links属性类似),我如何告诉用户代理特定的选项对经过身份验证的用户不可用

后端可以进行过滤,但是同一个资源URL可能具有不同的表示形式,具体取决于经过身份验证的用户。而且这似乎不利于REST或缓存

另一个选项是保留所有链接,并在认证用户无法使用该操作时让用户代理接收403禁止。这可能会让用户感到恼火


当这些操作可能会根据已验证的用户而改变时,如何通知用户代理可用的操作,同时保持对其他用户友好?

您是正确的。创建根据用户权限而变化的表示并不特别适合缓存。是否可以将权限变体划分为几个类别?e、 g.资源低安全性,资源中等安全性资源高安全性

这种方法有时是可能的,有时不是。另一个要考虑的问题是缓存对于这个特定的资源是否至关重要。也许是现在

此外,不必等到用户单击某个链接后才确定用户是否有权访问该链接。客户端可以在后台对链接执行选项请求,以发现哪些链接可用,并动态禁用不可访问的链接


这个问题没有单一的答案。根据不同的需求,不同的解决方案将在不同的情况下工作。

考虑RESTAPI是一个供机器人浏览的网站

网站是否返回包含您不允许看到的链接的HTML资源(页面)

不管是否如此,它都不会改变网站的“超媒体性”

但是,同一个资源URL可能具有不同的表示形式,具体取决于经过身份验证的用户

考虑一下网站的主页也是如此。资源是概念性的,主页是概念性的,它看起来像什么变化

web如何处理登录和注销视图的页面缓存

第一种方法是禁止缓存这些资源;并不是所有的东西都必须是可缓存的,约束只是资源可以相应地被标记

第二种是使用控制语义,如果您使用HTTP作为RESTAPI,则使用头


分类并不是那么简单。某些资源可以由任何用户访问,但其他资源由用户拥有,并且可能与一个或多个其他用户共享(对于只读或读写访问)。此外,某些资源将具有字段级权限。缓存对所有资源来说都不是那么重要,但API在任何地方都是统一的,这样以后启用资源缓存就很容易了。感谢您对Darrel的深入了解,附加选项请求似乎是最好的选择。