2013-01-11 60 views
5

REST方式思考創建嵌套的資源,是否正確使用POST在一個單一的呼叫,建立資源及其子資源? 在我的應用程序中,我有資源/notices/{notice}和子資源/notices/{notice}/photos/{photo}。如果沒有{notice},則{photo}不能存在,但{notice}不具有必要的照片。通常,我必須首先執行POST來創建通知,然後再執行另一個POST來添加照片。REST - 單POST

現在,我想允許創建帶有直接附加照片的通知,通過一個POST請求創建/notices/{notice}/notices/{notice}/photos/{photo},並向/ notices/{notice}/photos/{photo}創建多部分內容描述這兩個資源(通知的JSON,照片的二進制)。我想我只會爲子資源返回位置標題。

從本質上講,我想這阻止Android的客戶端發送兩個POST請求到服務器上載的通知有照片。 這是正確的嗎?還是它違反REST原則?我應該考慮讓他們分開並提出兩個不同的要求嗎?或者從通知中考慮將照片分爲單獨的實體是否是錯誤的?我應該只保留/notices/{notice}作爲資源,使用PUT添加照片?

哪一個是最好的解決方案?

回答

2

是,在創建父資源的同時創建子資源沒有任何問題。甚至可以使用PUT而不是POST來執行此操作,因爲父URL下的所有內容都屬於/屬於正在上傳的資源的一部分。

編輯:

現在我想允許具有照片的通知,直接連接的建立,從而實現/notices/{notice}/notices/{notice}/photos/{photo}創建一個單一POST請求/notices/{notice}/photos/{photo}

我不同意這一點。我建議發佈到收集資源的網址/notices。您將通知及其照片作爲單個表示(請求主體)提供。後端將爲通知和任何組成照片創建資源。

+0

當然由邏輯終點後一切都將是根資源的修改,因此使'POST'多餘的想法? (我可能誤解了你?) – James

+0

理論上,是的。您可以將/ questions作爲stackoverflow.com的子資源。但是,這不會導致POST冗餘。 –

+0

我會爭辯說,使用'POST'將是唯一明智的選擇,因爲OP沒有修改最重要的資源(直接)?用'PUT'創建資源意味着這個子資源已經存在? – James

0

雖然其本質在許多情況下,多次編輯/中創建未正式REST式建築風格處理。當你需要在集合的一部分報告故障

問題開始,問題是惡化時,他們的失敗有不同的原因。

這將影響選擇正確的超媒體控制,這對於客戶在給定的交易/對話中找到前進的方向是必不可少的。

所以我的建議是有一個嵌套的循環或POST請求,而不是一星POST創建嵌套的資源,所以它會更容易,更清晰,以解決各資源的狀態變化。

+0

解決方法是在第一個錯誤和回滾服務器狀態時失敗。以這種方式實施交易是否值得付出努力取決於服務器的繁忙程度。 –

+0

請登錄http://chat.stackoverflow.com/rooms/22578/restful-chat並討論這一點。我希望聽到更多關於你必須說的話。 –