2014-07-15 72 views
1

哲學上,我有關於如何解決以下REST情景一些例子問題:更新的東西在REST

1)誰在簽署的用戶希望「收藏」某人的博客中。用戶ID是一個guid,博客發佈是一個guid。這應該是PUT,因爲用戶/博客存在,或者POST,因爲'收藏夾'表中沒有條目?

2)數據庫中的安全行由10多個屬性組成,但我只想更新實體的一部分(用戶失敗的登錄嘗試次數)。這個電話應該是什麼?在JSON中傳遞整個數據傳輸對象?或者只是添加一個新的API路線的具體行動來更新?即只有一個參數的PUT(登錄嘗試次數)並傳遞用戶的ID。

3)類似於#2,一個用戶類(由25多個屬性組成),但我只希望用戶更新類的特定部分,而不是整個事情。在哲學上我是否需要傳遞整個用戶對象?或者只更新一件事就行了。看起來我可能會變得瘋狂,並且會針對特定屬性進行大量特定調用,但現實情況是,我可能只會更新用戶的2-3個特定部分(以及在其他情況下明顯更新整個內容)。這裏更新數據庫中某個實體的特定部分的方法是什麼?

非常感謝

回答

1
  1. 使用後,如果您還沒有一個ID/UUID呢。
  2. 資源是安全記錄。對該ID執行PUT,並傳遞要更改的屬性塊。
  3. 同上(2)。你應該得到任何參數來幫助你在數據庫中識別該記錄。如果在POST請求中發送這些請求並且您正在做AJAX,那麼將它們存儲在會話中是不合理的。

使用REST,一切都是關於更新離散資源(「名詞」)。這取決於你如何分配這些內容,而是一個簡單的界面,它使用動詞(「PUT」,「GET」,「DELETE」等),合理地返回相關的HTTP代碼,並且易於其他人執行最好的方式去。所以,只要問問自己,「我想給予CRUD什麼名詞,並且我會耗盡那些希望消費我的API的人?」

+0

感謝您的及時響應。因此,如果業務需要調用它,那麼使用PUT更新資源的特定組件(例如用戶的一個屬性)是可行/常見的,而不是在沒有任何變化的情況下傳回整個資源,除了一件事情?此外,對於#1,用戶存在,該項目存在,但'收藏夾'表中的條目不存在。爲什麼不是POST?技術上來說,我還沒有表中最喜愛的行的ID。謝謝! – NullHypothesis

+0

正確。除了指定要更改或獲得的名詞以及要更新的值(使用前者)之外,您絕不應發回任何內容。我錯過了。更新。一定要標記答案,如果這是你正在尋找。 –

+0

感謝您的更新 - 在#2你的意思是隻傳遞我想改變的屬性?因此如果有10個屬性,1個變化,只在帶有ID的PUT請求中傳遞1?即/ put/secrecord/1050519889(意思是更新特定記錄並將JSON數據傳遞給我想要更改的行)? – NullHypothesis