使用多个组合的REST资源管理视图状态

使用多个组合的REST资源管理视图状态,rest,resources,viewstate,Rest,Resources,Viewstate,例如,我将编写一个论坛,在浏览器中显示如下: - original post - Re: original post - Re^2: original post - Re^2: original post + Re: original post _______________________________________________________________________________ Text of the selected post. 树视图将是

例如,我将编写一个论坛,在浏览器中显示如下:

- original post
  - Re: original post 
    - Re^2: original post
    - Re^2: original post
  + Re: original post
_______________________________________________________________________________

Text of the selected post.
树视图将是一个资源,所选文章的文本将是一个,周围的页面将是一个。如果选择了其他帖子,则应更新“孔”页面,以便在浏览器中始终显示正确的URI。但是如果洞页面被更新,树的客户端状态就会丢失。树资源会被重新加载,并且会丢失扩展了哪些节点、我滚动了多远等信息

剩下的解决方法是什么

  • 是否像使用URI一样只执行页面的部分更新?树信息部分可能会变得相当大
  • 构造一个完整的资源并隐藏这样一个事实,即有树这样的底层资源?但这并不能拯救树之州
  • 是否将当前视图状态传输到服务器并将其与响应一起返回
  • 用饼干
  • 等待HTML5

其他想法?建议?

如果它有一个URI,那么它就是一个资源。同样地,包含所有这些内容的页面是一个资源,在ReST和纯旧HTTP中是一个句号。因此,它有自己的生命,独立于您可以在服务器上使用什么来编写页面

但是,如果您希望为页面提供服务并使用ajax调用来更新内容,那么您可以直接访问您提到的每个资源以获取它们的当前版本。在那个阶段,您可以使用hash标记(如第一个要点中所示)使URI副本粘贴友好。或者,您可以使用隐藏的iframe使导航在浏览器中仍能正常工作。两者通常结合使用。在这种情况下,页面的当前状态要么(或两者)在javascript中,要么(和)在URI的哈希部分

请注意,页面本身仍然是一个独立的资源,因此,在散列创建新URI之前,您将传递的任何视图“状态”。除非您明智地指定内容位置,否则代理和缓存会将它们视为完全不同的资源

在生成标记之前处理服务器上所有UI的场景中,依赖Cookie简直是邪恶的。它破坏了web的体系结构,破坏了缓存,等等。如果您想用javascript将其用作持久性存储,并且只要服务器不看它,而且它纯粹是装饰性的,那么请自便

从这个意义上讲,HTML5中的本地存储将用更多的空间解决同样的问题