2013-12-22 60 views
2

我正在編寫一個RESTful Web服務API。我將發佈一個Answer資源到一個機械問題。當我這樣做時,我想知道我的回答是否正確。爲此,我有一個Result資源。我可以從POST請求返回不同的資源嗎?

返回與您在HTTP請求中發佈的資源不同的資源是否錯誤?

例如: POST /mechanical-questions/4/answers - shoud返回結果。

答案將被保存在服務器上,但結果也是如此。我是否應該將HttpStatus 20x代碼與位置標題一起返回,以指示我可以在哪裏找到測驗結果或答案,以及響應實體應該是什麼?創建的答案或測驗結果?

回答

2

很明顯,沒有一個'正確'的答案。我認爲你說得對,你不應該將RESULT對象返回給接收ANSWER對象的端點。對我來說,我認爲返回Location:標頭有點奇怪。應該由消費客戶決定在創建後他們想要對ANSWER對象做什麼。我有時看到的是POST響應對象中的位置屬性。

所以,你有這樣的

{ 
    'answer' : 'I hope I am correct' 
} 

的請求而這樣

{ 
    'id' : 12345 
    'answer' : 'I hope I am correct' 
    'result_id' : 68472 
    'result_location' : '/mechanical-questions/4/result/68472' 
} 

這允許客戶端來確定用戶後流動的反應讓一個答案 - 也許他們立即做獲得結果並顯示結果,或者在回答一系列問題後,可以獲得多重回應。

+0

是的,這是有道理的,但是我需要包含答案數據嗎?我可以只添加result_location嗎?或者這是不好的? – LuckyLuke

+0

當我想到RESTful API時,我認爲每個端點都代表單個資源或資源列表。當您發佈到端點以創建資源時,您應該返回剛剛創建的完整資源。正如我在答覆中強調的那樣,應該由消費客戶決定他們想要用API做什麼。通過返回完整答案對象,您允許客戶端執行一些操作,例如存儲返回的答案ID並在其應用程序中創建映射表。 – user2923779

0

我認爲你應該肯定會返回一個OK代碼,因爲它是一個完全有效的情況。這也不是服務器錯誤或錯誤的請求或類似的東西。

至於響應實體,至少從我的角度來看,這確實取決於您的業務邏輯。開發人員之間有點爭議。如果你希望你的客戶在任何一種情況下都能得到正確答案,那麼就把答案本身。如果客戶在獲得答案之前應該嘗試進行一些嘗試,那麼可能會在響應實體中放置一個URL。你甚至可以同時做這兩件事......

相關問題