2011-09-16 76 views
4

我創建包含REST式服務的Web應用程序,我想一些澄清的是如何在POST請求應該由我的Java服務器端接受首選(標準)方法:REST風格的URL的優先方法?

方法1: http://localhost:8080/services/processser/uid/ {uidvalue}/EID/{eidvalue}

方法2: http://localhost:8080/services/processuser {UID: 「」,EID: 「」} - 這將在後體作爲發送JSON

這兩種方法都將使用「application/json」內容類型,但每個m都有優點,缺點ethod。方法2的一個缺點是,我可以立即想到的是,JSON數據需要映射到Java對象,從而在任何用戶訪問「processuser」servlet api時創建Java對象。您的意見非常感謝。

在這個特定的實例中,數據將被用來查詢數據庫,以將json響應返回給客戶端。

+1

你應該清楚的第一件事是「processuser」是什麼。也就是說,發佈數據是否會改變資源的狀態? – Artefacto

+0

什麼是Artefacto說的,再加上:除非你已經證明它是一個瓶頸,否則不要擔心創建一個對象來解析你的JSON。 –

回答

6

我認爲我們需要從您的問題中回過頭來。您的路徑段開頭爲:

這是一個錯誤。 URI應該標識資源,而不是操作。這可能不總是可能的,但這是你應該爭取的。

在這種情況下,您似乎用uideid(無論這些是什麼)來標識您的用戶。你可以建立路徑,如用戶被稱爲/user/<uid>/<eid>,/user/<uid>-<eid>(如果你必須/user/uid/<uid>/eid/<eid>);如果eid是專業化的,而不是與uid平等,那麼/user/<uid>;eid=<eid>會更合適。

你會被張貼到/user//user/<uid>/<eid>如果你知道標識符提前,通過使用通過使用/user/<uid>/<eid>穿上/user/<uid>/<eid>改變狀態 DELETE刪除用戶創建新的用戶。

所以要回答你的問題,你應該在/user/<uid>/<eid>上使用PUT,如果「processuser」的目標是用你提供的數據改變用戶的狀態。否則,映射到REST模型並不那麼幹淨,可能最好的選擇是定義資源/user/process/<uid>/<eid>並在那裏使用所有數據,但POST到/user/process所有數據都會差不多相同,因爲我們已經進入RPC陣營了。

+0

我認爲processuser是某種對象,很好的調用RPC點。 –

0

POST請求,方法2通常是首選,雖然經常資源名稱將使用複數,因此,你實際上張貼到:

http://localhost:8080/services/processusers 

這是創建新的記錄,但是。

它看起來像你真的在使用大多數RESTful服務將使用GET請求(檢索記錄),在這種情況下,首選方法1。

編輯: 我意識到我沒有收到我的答案,所以請考慮由Rails設置的標準。您可能會也可能不會同意這是一個有效的標準。