代码之家  ›  专栏  ›  技术社区  ›  mogsie

restfulhttp:在同一URI上向两个用户显示不同的表示

  •  4
  • mogsie  · 技术社区  · 14 年前

    我正在设计一个超媒体API,是的,一个restfulapi,带有超文本约束。

    我们希望客户机以一个URI启动,这个URI可能是一个atom服务文档,或者是一个atom集合的层次结构(draft atom hierarchy extensions)。

    我的问题基本上是用户应该看到同一个URI的不同表示,还是应该根据他们的权限将用户定向到不同的URI?

    例如:用户A和用户B在系统中拥有不同的权限。它们使用不同的凭据登录到相同的起始URI。成功的响应可能是以下2种情况之一:

    1. 200好的,用户A在同一URI上看到与用户B不同的东西
    2. 302(或其他重定向)每个用户到例如/endpoint/userA(他们自己的)

    可缓存性之间的折衷当然是最小的,因为资源只由客户端缓存,而不是由中介缓存,但是可见性也有折衷(URI包含(经过身份验证的)用户ID)。最后,未来还可能允许用户A(或超级用户)看到用户B看到的内容。

    我不是问Twitter或Facebook做什么,我更感兴趣的是其他实践者对此有什么看法。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Darrel Miller    14 年前

    就我个人而言,我觉得这是一个非常艰难的决定,我认为这在很大程度上取决于有多少内容会改变。如果区别在于遗漏了一些额外的细节,那么我可能会将其视为一个单独的资源,根据用户的不同而有所不同。

    然而,一旦差异开始变得更加显著,那么我将考虑创建不同的资源。我仍然会尽量避免创建特定于特定用户的资源。也许对于特定的资源,您可以创建一组具有不同内容级别的子资源。例如

    /Customer/123?accesslevel=low
    /Customer/123?accesslevel=medium
    /Customer/123?accesslevel=high
    

    这种方法与302结合在一起,在某些情况下可能就足够了。对于更复杂的情况,可以使用多个查询字符串参数。

    /Employee/123?SocialSecurityNo=yes&SalaryInfo=yes
    

        2
  •  2
  •   Community Jaime Torres    4 年前

    我的问题是,用户应该看到不同的表示吗 对于相同的URI,还是应该将用户定向到不同的URI 在他们的许可下?

    成功的响应可能是以下2种情况之一:

    1. URI
    2. 他们拥有)

    两条路都很宁静。资源的表示形式取决于权限。通信是无状态的,因为每个请求都使用http auth发送凭据(用户名、密码)。在权限检查之后重定向到另一个表示变量是个好主意。这样,您就可以将授权逻辑与资源表示逻辑完全分离,这样您甚至可以将其移动到另一台服务器,并且可以创建非常好的可缓存资源表示。例如 GET /endpoint/userA userA /endpoint/userA?owner=true ,因为她是配置文件的所有者,或者您可以创建特征组合: /endpoint/userA?feature1=true&feature2=false 等。。。为此设置细粒度访问控制非常容易。另一种保持缓存的方法是将用户id附加到每个请求的queryString中,但是这种带有重定向的解决方案要干净得多。谢谢你!

        3
  •  0
  •   Sanjay    14 年前

    选项1,回复200是可以接受的REST响应,并且比选项2更友好。

    Google Calendar Data API 允许用户通过对执行httpget请求来查询用户自己的提要 http://www.google.com/calendar/feeds/default/private/full .