2017-08-07 66 views
0

我正在編寫一個web服務,以異步方式執行一些軟件安裝。在一種情況下,在安裝過程中需要手動操作。因此,我暫停了安裝並等待用戶請求應用程序恢復安裝。哪個HTTP方法最適合恢復異步任務?

目前我們可以通過在/running-install上執行GET請求來取回正在運行的安裝並取消安裝,但在/running-install/<id>上的DELETE取消,但找不到用於恢復暫停安裝的適當方法。
我正在考慮像/running-install/<id>上做的PUT,其中包含一個包含{"status":"running"}的身體,但它對我來說並不合適。
謝謝

+0

爲什麼它不好聽? –

+0

嗯,我覺得它有點冗長,我在流浪我沒有另一個動詞,可以實現相同的目標,而不必提供一個機構。我認爲主要原因是我們不能暫停安裝,所以我們不能用'{「status」:「paused」}'執行PUT。如果這是「最好的」,我將最終實現,但我想確定。 – BlackSponge

回答

0

哪個HTTP方法最適合恢復異步任務?

語義上你想用新狀態替換給定任務的狀態。 PUT似乎是這種情況下的合理選擇。

引述RFC 7231

4.3.4. PUT

目標資源的狀態是 創建或與由封閉在請求消息中的表示 定義的狀態替換的PUT方法請求有效載荷。 [...]

然後發送新的國家的代表在請求負載:

PUT /api/installation/1/status HTTP/1.1 
Host: example.org 
Content-Type: application/json 

{ "value" : "running" } 

一個成功的操作可能,例如,返回204並嘗試與修改狀態無效狀態可能會返回409


注:answer也可能會有所幫助。

+1

對我來說這聽起來不錯,謝謝! – BlackSponge

0

如果你正在執行這個協議作爲使用HTML的表示,那麼你可能會使用POST在這裏,你可能不希望客戶端處理這個作爲safe interaction網頁的序列。

POST方法請求目標資源根據資源自己的特定語義處理請求中包含的表示。

很難與此錯誤。

需要注意的是資源是整合資源

你應該期望有很多許多更多的資源,你的集成領域比你在你的業務領域做的業務對象。

所以,如果你有麻煩shoehorning消息,你需要爲你現有的有限資源,然後添加更多資源

根據您選擇對集成協議進行建模的方式,您可以爲POST,PUT,DELETE中的任何一種生效。

事實是,如果你真的在做REST,那麼提供多個集成協議來達到同樣的效果是完全合理的。超媒體客戶端可以基於與書籤頁面上的鏈接相關聯的語義來選擇遵循哪個協議。

+0

我不是這裏的POST大粉絲,因爲你說這一切都取決於我選擇的模型,我不認爲它會適合我的,除非我做出一些重大改變。但無論如何謝謝你的詳細答案。 – BlackSponge