2012-05-24 25 views
7

例如,如果我調用GET來獲取項目,請使用DELETE刪除它並再次獲取它,第二個GET應該如何工作?如何處理REST中的陳舊數據?

我的意思是,通過正確遵循REST原則,這樣做的正確方法是什麼,因爲GET可以被緩存,所有?在REST中處理陳舊數據的方法是什麼?

+0

如果你剛剛刪除了該項目,爲什麼你會試圖再次「獲取」它?它不會存在。也許我錯過了一些東西,或者問題不清楚。 –

+0

@Brent Pabst:例如,在UI應用程序中考慮鏈接,其中刪除發生在彈出窗口中,但GET鏈接處於打開器頁面中,並且未得到更新或通過郵件進行傳輸,並且用戶將它們直接插入到瀏覽器地址欄中刪除等。這取決於緩存!這個想法是,如果該項目不再存在,GET應該如何工作。禁用所有緩存?有一些緩存可以接受嗎?所有這些的REST方法是什麼? – JohnDoDo

+2

第二個GET自然會返回HTTP代碼'404 Not Found'。緩存是我另外提供的一個非常不透明的答案:「取決於」。但是如果*有*第二個GET,那麼它顯然會產生404? –

回答

4

首先,行爲取決於DELETE調用返回的響應代碼。

如果DELETE返回200 - OK204 - No Content那麼客戶端在下次調用GET時應該得到404 - Not Found。這是因爲202和204意味着資源立即被刪除。

但是,如果DELETE返回202 - Accepted,則客戶機有可能在一段時間後成功獲取資源。這是因爲202意味着資源已被標記爲刪除,但不一定立即清理。其次,如果涉及緩存,則應該建立行爲以便與不存在緩存時會發生的情況保持一致。除了任何緩存的副本之外,成功的DELETE應始終導致從數據的真實來源中刪除。

0

正如最初所說,在DELETE之後的GET應該會產生HTTP 404錯誤,而不管可能存在的緩存。邏輯代碼應該足夠聰明,以便從持久性存儲以及內存存儲或緩存中刪除記錄。另外,用戶界面應該能夠以任何你認爲合適的流程或流程來處理404的結果。

相關問題