我一直在尋找最佳實踐,以防止在使用POST創建新資源時意外創建重複資源,這是因爲資源將由服務器命名,因此PUT無法使用。我正在構建的API將被移動客戶端使用,我關心的情況是客戶端在提交POST請求後但在獲取響應之前斷開連接。我發現this question,但沒有提到使用條件POST,因此我的問題。REST:防止通過條件POST創建重複資源?
正在對父資源執行條件POST,類似於使用條件PUT修改資源,這個問題的合理解決方案?如果不是,爲什麼不呢?
客戶機/服務器交互將是一樣與條件PUT:
客戶端獲取父資源,包括ETag的反映其當前狀態(其中包括它的從屬資源),
客戶端執行有條件POST父資源(包括在If-Match頭父母的ETag值)來創建一個新的資源,
客戶端獲取得到之前斷開服務器響應,所以不知道它是否成功,
之後,重新連接時,客戶重新提交相同的條件POST請求,
無論是早先的要求,沒有達到服務器,因此服務器創建資源並用201回覆,或者更早的請求確實到達服務器,所以服務器回覆412並且不創建重複資源。
如果另一個客戶端在兩者之間執行GET/POST對,這是否意味着GET/POST對將會失敗?這可能是高流量情況下的一個問題。 – geon 2013-05-02 15:49:48
@geon您說得對,但所討論的集合資源是用戶特定的,而不是全局的,因此這種衝突的可能性很小。 – 2015-03-03 07:55:44