我有一个典型的RESTful API,它由每个人都可以使用的资源树组成。它们的结构是这样的:
/api
/api/games
/api/games/101
/api/games/101/boards
/api/games/101/boards/201
这些都包含公共信息,没有特定于用户的信息,因此可以有效地缓存响应,直到资源发生变化。
现在我想允许不同的用户执行不同的操作。例如:用户Alice
可以在game 101
中发帖,而Bob
不能。因此,在/api/games/101
的响应中,除其他信息外,我有一个可用操作的URL。这个url是/api/games/101/actions
的所有用户,所以响应/api/games/101
可以被缓存。
现在/api/games/101/actions
将重定向到用户特定的URL,其中定义了用户特定的操作。/api/games/101/actions/alice
或/api/games/101/actions/bob
取决于请求中验证的用户。
我的问题是,如果这是一个好主意?
是的,对不同的信息使用不同的资源(和不同的标识符)是个好主意。尽管RFC 7234定义了对私有缓存的约束,但它可能不会产生有用的差异。
从长远来看,为每个角色分配不同的资源可能比为每个经过身份验证的用户分配不同的资源更易于管理。
如果我更改经过身份验证的用户,浏览器中的缓存是否会有问题,因为这是每个经过身份验证的用户缓存,假设客户端是html-webapp。
私有缓存允许重用对经过身份验证的请求的响应,所以当Bob和Alice共享一个web浏览器,但不一定能访问相同的资源时,总是存在潜在的问题。