Restful - 如何在内部集合上RESTful设计crud操作

时间:2014-01-22 19:13:23

标签: api rest restful-url

我有以下对象

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.绑定更复杂 - 应该以正确的顺序声明,以便不删除外部元素。

这样做的正确方法是什么? 谢谢。

1 个答案:

答案 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而不是基于它们在其他实体内的顺序。希望有所帮助。