2014-01-22 39 views
0

REST風格的設計CRUD操作我有以下對象寧靜 - 如何在內部的集合

public class MyEntity{ 

    public int id; 
    public string name; 

    public List<Trains> trains; 
} 

現在,用戶更換的myEntity所內列車列表的值。
他刪除了兩個列車實例,更新了兩個實例的名稱並插入了兩個新實例。

設計crud命令寧靜風格的最佳方式是什麼?

我能想到以下幾點:

選項1.
1電話,myEntity所的HTTP更新,發送煥發出新的列車列表。
問題 - 該列表可能由數千個未更改的元素組成 - 冗餘。

選項2
1次調用,MyEntity的HTTP更新,只發送列表中已更改的元素。
發送也即指令改變的類型將是UPDATE和JSON將包含

1, "trainA", 'u' // update 
2, "trainB", 'u' 
3, "trainC", 'i' // insert 
4, "trainD", 'i' 
.... 

問題 - 這樣的名單我需要發送的狀態

選項3
發送單獨與寧靜用於內對象右命令 - 如下

delete .../MyEntity/3/train/1 
delete .../MyEntity/3/train/2 
update .../MyEntity/3/train/3 // +json 
update .../MyEntity/3/train/4 
insert .../MyEntity/3/train/5 // +json 
insert .../MyEntity/3/train/6 

問題:
1.不是事務 - 多ple命令。
2.綁定比較複雜 - 應該按照正確的順序聲明才能刪除外部元素。

什麼是正確的做法?
謝謝。

回答

1

如果我是你,我會選擇#3。它將是多個命令,是的,但至少它是更原子化的,因此也更容易理解客戶端/開發者。特別是當你的每一個URL都有一個單獨的動詞時,例如:

GET/entity/{entityId}/train/{trainId} - 獲取列車PUT/entity/{entityId}/train/{trainId} - 更新火車trainId POST/entity/{entityId}/train - 創建一列火車並將創建的火車返回trainId DELETE/entity/{entityId}/train/{trainId}刪除列車trainId。

我不確定您的意思是「按照正確的順序聲明」。火車上的CRUD應該根據ID而發生,而不是根據他們在某個其他實體內部的順序。希望有所幫助。

+0

另一種可能性是_additional_允許發佈說明要對整個收集地址進行更改的文檔。這是非CRUD,但允許複雜的客戶端使用較少的請求執行操作。請記住,POST不_just_的意思是「創建」... –