2013-02-15 129 views
0

我正在分佈式執行服務器上工作。我決定在服務器上使用基於HTTP的REST API。客戶端將連接到服務器並獲取下一個要完成的任務。顯然我需要「更新」檢索的任務,以確保它只處理一次。 GET不應該有任何副作用(例如更改檢索的資源的狀態)。我可以使用POST(更新資源),但我也需要檢索它。我在想,我可以有一個POST標記任務爲「聲明」的URL,然後GET將該任務標記爲已檢索。不幸的是,我再次對GET有副作用。這只是不會在REST中工作嗎?我有一個「功能」資源來做到這一點,但沒有一點研究就不想放棄範例。如何在REST API中創建堆棧?

帕特Ø

回答

-1

REST實際上只是一個概念,你可以實現你想要的東西。沒有一個'正確的方式',因爲每個人的用例都不一樣。 (是的,我明白那裏有一個定義的規範,但是你仍然可以做到這一點)在這種情況下,如果你的GET需要有副作用,它會有副作用。只要確保正確記錄你所做的事情(以及潛在的原因)。

然而,它聽起來就像你只是想創建多個用戶的隊列中,如果用戶被自動(如腳本或其它機器),你可能想看看使用實際的隊列。 (http://www.rabbitmq.com/getstarted.html)。

如果您正在使用這個驅動一個網絡界面或一些地方實際的人處理這個,你也可以使用一個隊列,用你的GET請求只需從隊列中拉出的下一個項目。

注意,使用大多數郵件系統時,你將無法保證在消息從隊列中拉出的順序,因此,如果順序是必要的,你可能無法使用這種方法。

0

如果沒有其他配合,您應該使用POST請求。沒有什麼能夠阻止你在POST請求上返回資源。但是顯而易見的是,某些(在這種情況下)會發生在該資源上,而使用GET請求時則不會這樣。