我正在设计一个超媒体 API,是的,一个带有超文本约束的 RESTful API。
系统的每个用户都将使用他们自己的凭据访问系统,因此我们处理的每个请求都经过身份验证和授权。每个用户通常都有特定的凭证,因此他们可能对每个集合具有不同的权限(例如,无、读、读/写)。
我们希望客户端使用它开始的一个 URI 进行初始化,它可能是一个 atom 服务文档,或者是 atom 集合的层次结构(草案 atom 层次结构扩展)。
我的问题基本上是用户应该看到同一个 URI 的不同表示,还是应该根据他们的权限将用户定向到不同的 URI?
例如:用户 A 和用户 B 在系统中具有不同的权限。他们使用不同的凭据登录到相同的起始 URI。成功的响应可能是以下两种之一:
- 200 OK,并且用户 A 在同一个 URI 上看到与用户 B 不同的东西
- 302(或其他重定向)每个用户到例如 /endpoint/userA (他们拥有)
可缓存性之间的权衡当然是最小的,因为资源仅由客户端缓存而不是由中介缓存,但也存在可见性的权衡(URI 包含(经过验证的)用户 ID)。最后,未来有可能允许用户 A(或超级用户)看到用户 B 看到的内容。
我不是在问 Twitter 或 Facebook 做什么,我更感兴趣的是 REST 实践者对此有什么看法。