2013-08-05 18 views
4

其餘的關鍵原則之一是不維護服務器上的狀態或無狀態地進行通信。我想看看這個原理如何在購物車上工作? 所以說,如果用戶從購物網站添加購物車中的產品。在我看來,服務器將有一些實現在會話範圍內有購物車,並且用戶將發送一個通話後將產品添加到購物車中。例如/ shoppingcart/products/1。現在,產品會保留添加到購物車中(但不會保留在數據庫中),直到用戶確認結帳。在確認退房時,購物車物品將被保存到服務器端的數據庫中。關於休息「無狀態通信」原理

這種方法(將商品置於服務器端的會話範圍內)違反休息原則嗎?如果是,那麼我們如何通過照顧「無狀態」通信原則來實現添加產品到購物車?

+0

用戶很少(如果有的話)直接與REST服務交互。通常有一些中間代碼(無論是瀏覽器中的JS,厚客戶端,非REST網站,還是甚至在同一網站中託管的非REST代碼)。沒有什麼可以說* *代碼必須是無狀態的。 –

+0

對不起,我需要知道的服務器端實現。是的,我同意用戶不會直接與休息服務交互,但會與一些js或與內部將使用其餘uri執行操作的其他機制進行交互。 –

+0

與Damien所說的相反,用戶*直接與RESTful服務交互,它們在客戶端與非RESTful服務不能區分,而且用戶通常不知道!每個購物車都有自己的網址的任何購物車系統都可能設計有REST,即使該網址只能由創建它的用戶訪問。其中一小部分實際上是RESTful。 –

回答

2

應該將購物車作爲資源進行處理,並將產品添加/刪除,就像您可以添加或刪除REST中任何兩個資源之間的關聯一樣。客戶不應說「現在購買我的購物車中的物品」,客戶應該說「現在購買購物車中的物品#187462」。爲每個購物車指定一個URL,並讓您的操作對該資源執行操作,而不是綁定到當前會話的某個產品陣列。

另一種也是無狀態的方法是讓客戶端跟蹤購物車中的所有物品,但這意味着用戶不能在一臺計算機上放置購物車(放棄它)並在其他設備上恢復購物。

附錄:請記住,權限/訪問控制可以獨立分配。當然,每個購物車都有一個網址,但一定要這樣做,以便登錄用戶只能看到他們創建的購物車資源。

+0

非常好,是的,這看起來像是一種可行的方法,可以將購物車當作資源來使用,並且可以爲服務器上的購物車分配唯一的ID,以便在其中添加/更新/刪除項目。 –