2010-03-09 86 views
3

您有什麼經驗在使用If-Match來實現Web服務上的樂觀鎖定方案?樂觀鎖定和HTTP If-Match標頭

爲了簡化事情,我們假設我們正在構建一個簡單的CMS,只包含「頁面」,每個頁面都只有一個主體。如果兩個用戶同時開始編輯同一頁面,則僅提交上次保存的用戶所做的更改(或者說,他們會覆蓋其他用戶所做的更改)。

爲了防止出現這種情況,我計劃使用條件PUT s,即獲取ETag響應頭的值,並將其作爲PUT請求中的If-Match頭的值提供。如果此值與基於頁面當前狀態的值不匹配,服務器會拒絕PUT,並帶有412.

我知道一個明顯的缺陷,可能會在前提條件檢查和實際的數據庫更新,但這些可以通過事務和排序來彌補。

您是否在實踐中嘗試了這一點?這是一個壞主意嗎?

+1

沒有試過,但RFC2616提到這個確切的使用情況,所以我認爲它可能工作:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.24。但不知道你如何強制用戶代理使用PUT。 – Piskvor 2010-03-09 13:23:59

回答

1

好了,這是對的事情。如果-比賽是專爲,是的,這可以作爲一個設計。