2016-05-15 40 views
1

是否有向API消費者公開狀態更新函數的約定?通過REST API設置狀態

我有一個/訂單端點,其中每個訂單可以有一些國家,例如: 1 - 提交 2 - 等待 3 - 發貨

客戶可以提交訂單,但隨後工作人員將最終擁有自己的GUI改變訂單狀態。

我想知道,對於特定的順序,例如/orders/123,使用PUT /orders/123{state: 2}消耗API會更好嗎?

或者是否會更好地公開一些便利功能,如GET /orders/pending可以處理API使用者的設置狀態?

+1

GET請求不應該改變你的數據的內部狀態,所以如果你想有'GET/orders/pending'來更新訂單的狀態,那就是糟糕的設計。 – gevorg

回答

2

通常的做法是使用GET作爲只讀數據訪問請求,PUT請求設置狀態,更新和其他數據寫入操作。

除了很常見之外,這種做法還有一個直觀的附加好處,它可以很好地傳達訪問API的API和客戶端代碼的意圖。

但是,請注意,PUT動詞實際上是指替換爲資源全部,而不是用於更新資源的任何單個屬性。還有另一個HTTP動詞 - PATCH - 這會更適合你的情況。

與其創建另一個HTTP動詞引用副本,我想引用你到this tutorial,我發現它非常優秀和徹底。看一看PUTPATCH動詞,以便爲您的實施做出決定。

+1

PUT請求旨在替換/創建資源,而不是部分更新,即PATCH –

+0

@TimCastelijns這是一個很好的觀點;我正在解決原始問題中引用的特定HTTP動詞,但你說的沒錯,我會盡快更新我的答案以反映'PATCH'。 – CoolBots