2015-04-23 14 views
2

當您在REST集合上執行PUT時,應該提供集合中成員的地址?對狗在REST集合上放置。我提供地址嗎?

看跌地址指定

[{"name":"sparky", "id":1}, {"name":"rusty", "id":2}] 

或...對狗

PUT沒有地址指定

[{"name":"sparky"}, {"name":"rusty"}] 

,並讓服務器在返回新成員的位置集合。在我的情況下,我的表中的行ID。

回答

1

如果要發送PUT來替換整個集合中的所有資源,則應發送全新的/更新的實體。

  • 如果id是實體的一部分,你應該在實體內發送,但對於具有的元素沒有與URI做(又名「地址」),作爲客戶有客戶端現在知道服務器如何建立一個URI
  • 如果id不是客戶實體的一部分,則不應在實體內發送它。

但是這兩種情況是可能的,你的服務器可以同時接受,重要的僅僅是在收集了PUT表現爲在HTTP/1.1 specs描述:

PUT方法,該封閉的實體存儲的請求在提供的Request-URI下。

所以,如果你PUT/api/animals/dogs/的狗在被/dogs/,而不是如發現下/cats/

如果Request-URI是指已經存在的資源,封閉的實體應該被視爲駐留在源服務器上的一個修改後的版本

這意味着,在任何PUT收集,取出整個集合並用方法調用主體中給出的實體創建一個新集合。

如果Request-URI沒有指向現有資源,則源服務器可以使用該URI創建資源。

這意味着如果/animals/dogs/是空的,您應該在那裏創建一個新的集合。

+0

嘿,謝謝你的迴應。是的,我有點迷失在這一切。我的理解對於REST的GET,POST和DELETE非常穩固,但是我發現很難處理集合上的PUT。根據這個:http://en.wikipedia.org/wiki/Representational_state_transfer(我知道維基百科...)一個PUT將取代集合,這是我在我的問題中試圖做的。根本沒有收藏品嗎? – shallowtempo

+0

嗨,對不起,這是不正確的。收藏上的「PUT」確實是可能的,但我還沒有在真實的世界環境中看到它。對我來說,在集合上使用'DELETE',然後'POST'感覺好多了,但是沒有技術上的解釋,所以我已經更新了我的答案來處理你想要的案例。 – Robert

相關問題