假設我們有集合/items/
,我們要允許客戶端增加新項目到這個集合。通過Rails的啓發,我得出如下:我們只需添加資源/items/new
,誰想要添加項目首先發出GET /items/new
,接收空實體(可能與一些默認值設定)之一,然後充滿希望的領域和問題POST /items/
。創建新的文檔(實體),將其添加到收藏
- 此方法適用於真正的REST API嗎?什麼可以改進/重做?
- 如果突然這種做法是很好的(如果不是,反正):
假設每個項目都有必填字段標題。回覆
GET /items/new
回覆默認值可能不太好。 在這種情況下有什麼更好?要返回null
標題並且在POST空白時返回錯誤?要爲new
資源實現類似構造器的邏輯,請求查詢字符串中的必填字段?還有別的嗎?
UPD。只是爲了澄清,使用new
不是關於將「添加」分割爲「分配」和「寫入內容」,因爲沒有對數據存儲的操作在GET /items/new
上完成。它意味着實現實體設計的靈活性:富客戶端可根據響應新事件而動態呈現輸入字段。那有意義嗎?或者合同是固定的,我們需要爲這樣的改變版本API?
我同意。爲什麼要爲數據訪問服務提供類似於構造函數的功能。你可以把這些東西放在客戶端。 – lavrik 2013-03-11 16:52:32
@creinig:在[Rails]中查看[this](http://guides.rubyonrails.org/getting_started.html#creating-new-posts)。它不會將「添加」到「分配」和「寫入內容」中,因爲沒有對數據存儲的操作在GET/items/new上完成。它意味着實現實體設計靈活性的一種方式:富客戶端可以根據響應「新」的動態呈現輸入字段。那有意義嗎? – starteleport 2013-03-11 17:07:51
@starteleport:好的,有效的點。但是,如果這是需要的,它應該被明確地建模爲兩個單獨的動作。你鏈接的rails教程也是這樣(動作'新'和'創建')。它也允許在沒有前面的「新」的情況下調用「創建」。 – creinig 2013-03-11 17:43:37