1

根据 Roy Fielding 的超媒体作为应用程序状态引擎 (HATEOAS),每个资源都应该附有可以对该资源执行的操作(或链接)列表。

如果动作包含在实体中(与使用 Json-Schema 的链接属性相反),我如何告诉用户代理特定选项对经过身份验证的用户不可用?

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

另一种选择是保留所有链接,并让用户代理在经过身份验证的用户无法使用该操作时收到 403 Forbidden。这对用户来说可能很烦人。

当这些操作可以根据经过身份验证的用户而改变时,如何通知用户代理可用的操作,同时保持对 REST 友好?

4

2 回答 2

1

You are correct. Creating representations that vary based on user permission is not particularly cache friendly. Is it possible to classify permission variants into just a few categories? e.g. resource-low-security, resource-medium-security resource-high-security

Sometimes this approach is possible, sometimes it is not. The other aspect to consider is whether caching is critical for this particular resource. Maybe it is now?

Also, it is not necessary to wait until the user clicks on a link to find out if the user has the permissions to follow it. The client could perform an OPTIONS request on links in the background to discover which links are available and dynamically disable the links that are not accessible.

There is no single answer to this problem. Different solutions will work in different cases depending on the requirements.

于 2014-01-09T02:43:16.483 回答
0

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

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

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

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

考虑相同的网站主页。资源是概念性的,主页是概念性的,它看起来会发生变化。

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

第一种方法是禁止缓存这些资源;并非所有内容都必须是可缓存的,限制只是可以相应地标记资源。

第二个是使用控制语义,如果您将 HTTP 用于 REST API,则使用标头。

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

于 2018-11-01T11:17:56.080 回答