我有以下对象
public class MyEntity{
public int id;
public string name;
public List<Trains> trains;
}
现在,用户更改了MyEntity中列车列表的值 他删除了两个列车实例,更新了两个实例的名称并插入了两个新实例。
设计crud命令restful风格的最佳方法是什么?
我能想到以下几点:
选项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.
使用内部对象的右命令发送单独的restful - 如下所示
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.不是交易 - 多个命令
2.绑定更复杂 - 应该以正确的顺序声明,以便不删除外部元素。
这样做的正确方法是什么? 谢谢。
答案 0 :(得分:1)
如果我是你,我将使用选项#3。这将是多个命令,是的,但至少它更原子,因此也更容易理解客户端/开发人员。特别是当你的每个网址都附加一个单独的动词时,例如:
GET / entity / {entityId} / train / {trainId} - 使用trainId获取火车 PUT / entity / {entityId} / train / {trainId} - 用trainId更新火车 POST / entity / {entityId} / train - 创建一列火车并使用trainId返回创建的火车 DELETE / entity / {entityId} / train / {trainId}用trainId删除火车。
我不确定你的意思是“以正确的顺序宣布”。列车上的CRUD应该基于ID而不是基于它们在其他实体内的顺序。希望有所帮助。