我正在構建一個REST風格的Web服務,該服務對於一組數據類型具有通常的CRUD操作風格。這些API的HTTP動詞映射是顯而易見的。如何最好地設計用於啓動操作的RESTful API
有趣的部分來自客戶端可以請求針對其中一個數據對象進行長時間運行(即小時)操作的初始化;通過查詢數據類型本身來報告操作的狀態。
例如,假設一個對象,具有以下特點:
SomeDataType
{
Name: "Some name",
CurrentOperation: "LongOperationA",
CurrentOperationPercent: 0.75,
CurrentOperationEtaSeconds: 3600
}
我的問題,那麼,是最好的RESTful方法應該是什麼開始LongOperationA
?
最明顯的做法似乎是將操作本身作爲標識符,可能是沿着POST
的行,但即使我沒有將數據標識符指定爲查詢參數,但看起來有點笨重。https://my-web-service.com/api/StartLongOperationA?DataID=xxxx
將它作爲一個冪等動作來實現也是非常微不足道的,因此使用POST
看起來很浪費;另一方面,PUT
很尷尬,因爲實際上沒有數據被寫入服務。
在他們的服務中是否有其他人面對這種情況?您如何公開一個API來初始化尊重RESTful主體的操作?
TIA,
馬克
是的,那幾乎是我領導的地方。我希望找到一種自然感覺的方式來與PUT做到這一點,以更好地傳達操作的冪等語義,但最終我認爲POST是最適用的動詞。感謝您的反饋! – 2011-02-10 03:00:21