比方說,我有一個旅行計劃應用程序,並且每次旅行都由「路徑」資源(例如,表示要驅動的路線)組成一系列點。我可以用CRUD操作,像這樣(只是一個例子)請求這些資源:你如何可以同時創建和刪除?
POST /trips/1234/paths
<Path>
<Point>32,32</Point>
<Point>32,34</Point>
<Point>34,34</Point>
</Path>
DELETE /trips/1234/paths/3
現在考慮,我希望能夠以一個路徑分爲兩路。在aobve的例子中,我可能想要選擇點(32,34)進行分割,這將導致兩條路徑 - 一條以此結束,一條以此開始。這意味着一個動作創建兩個新的資源,同時刪除另一個(被分割的路徑)。
因此,如果上述示例中的路徑是系統中的唯一路徑,並且我用一次調用將其拆分,那麼系統現在將包含兩條新路徑,原始路徑將消失。例如:
<Path>
<Point>32,32</Point>
<Point>32,34</Point>
</Path>
<Path>
<Point>32,34</Point>
<Point>34,34</Point>
</Path>
我很苦惱這將如何被處理RESTfully。如何處理導致創建/修改/刪除多個資源並將其傳遞給調用者的調用?
我絕對可以通過多次調用(兩個POST創建新路徑和一個DELETE刪除原來的),但我希望這是一個單一的調用。
啊...這是我所尋找的更多。我想我仍然希望它是一個單一的請求,而不是讓客戶端通過執行分割的工作流程(儘管我喜歡你的建議)。我可以看到保留一段時間的路徑資源。客戶端稍後可以刪除它以「撤消」拆分,或者一段時間後,服務器可以刪除拆分路徑資源(刪除撤銷能力)。思考? – SingleShot
掛在過去的資源上會導致你的API用戶混淆。 DELETE謂詞用於刪除資源,預期的操作是僅刪除該資源。在您提出建議的情況下,您不僅會刪除資源,還會刪除和更改其他資源。如果您希望能夠撤消拆分,我會對pathsplit資源執行GET操作,然後使用pathsplit資源作爲有效內容執行POST操作以創建新的undosplit資源。 –
undosplit資源知道如何從pathsplit資源中撤消拆分,並且可以創建並返回新資源。 「撤消拆分」被理解爲刪除兩個資源並創建新資源,等同於原始的「未拆分」,但不是同一個實例。 –