2010-01-26 24 views
0

比方說我會寫一個論壇,它看起來像這樣在瀏覽器:管理視圖狀態多重合成REST資源

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

Text of the selected post. 

樹視圖是一個資源,選擇後文會是一個,周圍的頁面將是一個。如果選擇了另一篇文章,則應更新空洞頁面以始終在瀏覽器中顯示正確的URI。但是如果更新了空洞頁面,樹的客戶端狀態就會丟失。樹資源被重新加載,信息擴展了哪些節點,我滾動了多少等等。

什麼是解決這個問題的REST方法?

  • 使用諸如http://some.where/post/123#someTreeInfo之類的URI並僅執行頁面的部分更新?樹信息部分可能變得相當大。
  • 構建一個完整的資源,並隱藏像樹這樣的基礎資源的事實?但那不會保存樹狀態。
  • 將當前視圖狀態轉移到服務器並將其返回給響應?
  • 使用cookie?
  • 等待HTML 5?

其他想法?建議?

回答

1

如果它有一個URI,它是一個資源。因此,包含所有這些內容的頁面是一個資源,句號,在ReST和普通的舊HTTP中。因此,它有它自己的生活,獨立於您可能在服務器上使用以組成頁面的內容。

然而,如果你想爲你的頁面,並使用AJAX調用來更新內容,那麼你就直接去每個你所提到的得到他們的當前版本的資源。在那個階段,你可以使用散列標籤(如你的第一個要點)來使URI複製粘貼友好。或者您可以使用隱藏的iframe來使導航在瀏覽器中仍能正常工作。兩者通常結合使用。在這種情況下,頁面的當前狀態可以是(或兩者都)在javascript中,或者(和)在URI的散列部分。

請注意,頁面本身仍然是一個獨立的資源,因此您在散列之前傳遞的任何視圖「狀態」都將創建一個新的URI。除非明智地指定Content-Location,否則代理和緩存將完全將其視爲不同的資源。

在生成標記之前處理服務器上的所有用戶界面的情況下,依賴於Cookie完全是邪惡的。它打破了網絡的體系結構,打破了緩存等。如果你想用它作爲持久性存儲與JavaScript,並且只要服務器不看它,並且它是純粹的裝飾性的,那就自己去做吧。

從這個意義上說,html5中的本地存儲將解決相同的問題,更多的空間。