2009-11-17 51 views
5

我有一個客戶端界面,允許用戶對樹形輪廓執行多個編輯。儘管可以通過不同的URL作爲單獨的資源訪問其部分,但我認爲構成該大綱的記錄總體上是單個資源(/概要/ 39)。通過REST更新結構化資源的最佳實踐?

問題是用戶可以編輯大綱中的現有節點以及向大綱添加新節點。通常,當您編輯某些內容時,請將其更改以及添加新內容時發佈;但是,在某些情況下,您希望在單個事務中包含所有更改(包括添加和編輯)。人們如何處理這些問題有哪些實用的方法?

儘管輪廓已經存在並且PUT看起來合適,但嵌入式添加會違反PUT的冪等性。我不確定POST是否合適。出於設計目的,我決定不保存用戶所做的每個獨立更新,但我想這提供了一個解決方案。儘管如此,還必須有其他人處理我的問題或對此有所瞭解。

回答

1

有什麼辦法可以使添加冪等?例如。如果節點有一個自然鍵,那麼當客戶端第二次嘗試添加一個節點時,你什麼都不能做。

+0

沒有自然鍵,但是這使我認爲,服務器(或客戶)能當我創建新的節點時,會出現臨時指導。通過這種方式,記錄可以通過其ID和GUID識別。通過使用GUID,如果用戶未能提交整個事務,我不會最終消耗ID。在這個說明中,它引出了使用guid作爲PK而不是身份種子的問題。會給它一些想法。謝謝。 – Mario 2009-11-17 19:45:20

+0

有趣!很高興我能幫上忙。 – 2009-11-17 21:11:01

+0

經過進一步調查,我已經決定一個PUT只有永遠是正確的,如果你是整個資源的投入。由於我只是將PUTTING DELETE(添加/更新/刪除的節點),我認爲將PUT返回到子資源URL更有意義,類似於您的事務子資源建議。我還沒有弄清楚細節。 – Mario 2009-11-18 16:21:39

0

如何:創建新資源:/ outlines/39/transactions,並將您的交易發佈到該資源,例如:

POST 「ADDNODE =節點1,ADDNODE =節點2,editNode =節點3,了newName = foobar的」 來/概述/ 39 /交易