2012-11-28 21 views
2

我正在指定具有可查看,創建,編輯或刪除的資源的休息系統。我試圖尊重休息和http方法的語義。HTTP REST如何在最終的URL未知時創建新的資源

如果資源被http://mydomain.org/oid_bar確定,我可以用這些方法來管理它: - 將創建或更新這個資源 - DELETE刪除該資源 - 獲取返回此資源

但是,如果你需要創建一個你還不知道的新資源,你如何繼續?當您將對象添加到數據庫並且主鍵由數據庫自動生成時,這種情況非常常見。在我的情況下,我的後端是一個數據庫。

我想到了一個資源爲http://mydomain.org/next_free_oid的解決方案,該解決方案返回下一個空閒oid並增加其值。這個資源只會響應POST請求。通過返回的oid,我可以向目標URL發送PUT請求。

另一種解決方案是發送POST請求到http://mydomain.org/。這個請求會用一個生成的oid創建一個資源並返回oid。

先前解決方案的一個變體發送POST請求http://mydomain.org/create_object

第三種解決方案是我的首選之一。但是它是否符合HTTP/REST使用URL作爲服務?

每個評論都是值得歡迎的。

問候, 的Mickaël

回答

3

的約定是一個POST到http://mydomain.org/

然後,您應該返回一個狀態碼201創建,並設置響應的位置標頭指向新創建的資源。

我試圖找到一些鏈接備份自己了......

編輯:您也可以選擇返回新創建的資源,如果你願意的話,但設置的位置還是頭是一個好主意。

試試下面的鏈接,雖然這是很難看到樹木,不見森林:

http://jcalcote.wordpress.com/2008/10/16/put-or-post-the-rest-of-the-story/

我個人reccomend獲取REST Web服務食譜,因爲它解釋的事情非常簡單和容易。

+0

太棒了!非常感謝。 – mvera

+0

很高興能幫到你! –

0

另外,請勿使用動詞形式URI URIs,例如http://mydomain.org/create_object - 您的URI應代表名詞,例如編輯表單,而不是表示「在此處發送數據以執行此操作」的謂詞。對於你的動詞,選擇合適的HTTP方法。 [RFC2616]