2015-10-04 62 views
2

我有一個包含項目列表的REST資源。REST POST重複列表項

例如爲:GET http://myurl/rest/items

的項目沒有在目前的ID。 (但這並不重要) 該列表不應包含重複項。根據項目的屬性確定重複項目。 創建新項目時,應將其添加到列表頂部。當該項目已經存在時,它應該被移動到列表的頂部。

我們現在通過使用一個帖子來實現這一點,當該項目是新的時候會返回一個201。它可以被添加到列表的頂部。當該項目已經存在時,該項目被移動到列表頂部,我們返回一個205 RESET CONTENT。 這表示前端需要刷新項目列表。

這似乎是一個很好的解決方案,因爲它很容易理解,儘管我不確定它是否是最「寧靜」的解決方案?另外,我不確定這是否是http代碼的正確用法?

如果還有其他建議,我想聽聽他們。

謝謝!

回答

1

由於您利用HTTP狀態碼來通知客戶端使用不同的用例,因此我發現您的方法很有趣並且RESTful。其目的是告訴客戶清除表單中的內容或刷新UI。這裏是規範:

服務器已經履行了請求,用戶代理應該重置 文檔視圖導致請求發送。此響應爲 ,主要用於允許通過用戶 輸入發生動作輸入,然後清除輸入形式爲 ,以便用戶可以輕鬆啓動另一個輸入動作。

我讀了狀態碼205,主要集中在窗體重置表單。例如,要連續輸入一系列記錄:填寫表單,發送數據,服務器通知Web UI重置表單以在同一表單中發送其他內容等等。這是假設瀏覽器支持的東西,但他們實際上不支持這個!實際上,代碼實際上並不常見。

但是,在我們的案例中,我發現這符合您的需求,而且更加RESTful。

另一種方法可能只是簡單地使用狀態碼200告訴客戶端請求成功,但不會發生添加,與狀態碼201不同。通過狀態碼200,您隱式知道項目已移至列表頂部,因此您需要刷新列表。

這是一個有趣的狀態碼204和205:https://benramsey.com/blog/2008/05/http-status-204-no-content-and-205-reset-content/

希望它能幫到你, Thierry