如何从容地为角色视图建模?
假设我有一个可供买家或卖家查看的资源(有些内容在资源上在他们之间共享,有些内容对他们每个人都是唯一的)
我是否应该将它们设为单独的资源:/resource/1/buyer、/resource/1/seller
或者我应该传递一个格式:/resource/1?viewer=seller
我不会把它放在任何地方。相反,我会让相同的 URL 根据经过身份验证的用户显示资源的适用部分。
用户的角色在身份验证时已经确定,要求在查询中复制数据是没有意义的。想象一下,您有一个复杂的用户权限系统。然后你会让用户在 URL 中复制他们的整个 ACL 吗?:/ 这样用户甚至不必知道它的角色。
如果视图根本不同(例如,根本不共享任何字段或字段具有不同的语义),那么我将创建两个资源(/auction/1/buyer-info、/auction/1/seller-info)。但这可能不是这里的情况。
如果实际上用户可以选择同一资源的多个视图,那么我会将视图放在查询参数 (?view=simple) 中,因为它与资源本身无关,但实际上是“查询参数”。但请记住,这里的查询参数是“view”,而不是“viewer”(如您的示例中),这是 IMO 的一个重要区别。
通过遵循这三种方法,您可以缓存资源,然后根据 a) 当前用户和 b) 视图查询参数从中剥离相关数据。