設計API並尋找一些建議。REST風格的設計:區分取消發佈和刪除
這裏的行動:
publish
:發佈文檔(POST)update
:更新文檔(PUT或PATCH)unpublish
:有把它的意圖採取把文件(?)delete
:完全刪除文檔(DELETE)
有什麼想法?
謝謝! 馬特
設計API並尋找一些建議。REST風格的設計:區分取消發佈和刪除
這裏的行動:
publish
:發佈文檔(POST)update
:更新文檔(PUT或PATCH)unpublish
:有把它的意圖採取把文件(?)delete
:完全刪除文檔(DELETE)有什麼想法?
謝謝! 馬特
更新和刪除是非常明顯的,因爲你有他們。
您認爲「發佈」與「創建」相同嗎? 「發佈」可能意味着將您創建的文檔公開並可見。一種想法是,你只能創建一次文檔,但是你可以多次發佈和取消發佈。
您可能會考慮文檔的生命週期以及在「取消發佈」後可以使用它做什麼。它的類型取決於你想要的序列:「創建(發佈?)...取消發佈...發佈...取消發佈...刪除」來做。如果發佈/取消發佈不做任何與創建/刪除不同的內容,那麼您可以放棄它們並避免複雜性。
的純粹的REST的答案是提供在表示一個屬性:{...「發表」:真...},讓客戶端PUT的更新改變這種狀態。如果該狀態發生變化,則會觸發發佈或取消發佈文檔所需的任何處理。
但是,我在一個團隊中感到不舒服,因爲在公開和技術上可能對發佈文檔有很大的影響。因此,他們選擇將操作視爲POST「數據處理」請求(如HTTP規範所提供的)並提供POST URL以「發佈」和「取消發佈」文檔。
還有其他一些選擇。就像使用POST作爲附加動詞一樣,並提供一個「發佈列表」URI,允許您將文檔添加到發佈列表中,執行任何所需的處理:
POST ht_p://.../documents {文檔}
POST ht_p://.../published-documents {ID =}
DELETE ht_p://.../published-documents/ {ID}
DELETE ht_p ://.../documents/ {id}
編輯:打破了prentend URIs,因爲stackoverflow抱怨。;)
謝謝你的想法!我想避免區分已發佈和未發佈的文檔。你有什麼想法使用查詢字符串來區分?像'DELETE /?action = unpublish'。取消發佈可能不是一種常見模式。 – Matt
哦,'create = publish'在這種情況下。 – Matt
我可能不會稱之爲「動作」,只是因爲你不應該在REST中這樣做(HTTP動詞應該表示你的動作)。但是您可以將它視爲請求的修飾符,並將其稱爲「unpublish_only = true」或「permanent = false」或「erase = true」或其他。雅我知道那種聽起來像是文字遊戲......但是...... – Rob