更多RESTful命名

时间:2013-05-23 15:10:06

标签: rest restful-url restful-architecture

我搜索Google和SO越多,RESTful命名就越像黑色艺术而不是标准。我想列出一个场景,我现在的思路,并要求那些有REST经验的人来衡量。

我有一个“数据包”对象,您可以将其视为物理文件夹或活页夹。在这个包内是一种或多种形式。我的系统将这些表示为名为PacketForms的资源。每个表单记录都有一个SortIndex列,用于定义表单的显示/打印顺序。

当我在应用程序中显示表单列表时,有向上/向下箭头,允许用户更改表单的SortIndex。所以,现在我已经准备好实施这一行动了。

我的第一个想法是有一个专门用于在排序顺序中提升/降级表单的操作。如果我采用这种方法,基于我在这里看到的,似乎我应该考虑排序索引本身作为资源。所以,我可以在这样的查询字符串中表达我的意图,对吗?

PUT / PacketFormSortIndex / 5?action = Promote

但我也想过为什么不只是更新PacketForm本身并让后端查找SortIndex中的更改。如果更改了SortIndex,我将使用当前具有该索引的表单交换它,而不是升级/降级方法。因此,如果有人使用SortIndex = 3更新PacketForm以使其值为SortIndex = 2,系统将更新两个记录以完成交换。

就个人而言,我喜欢第一种方法的原子性质。它有一个非常明确,明确的目的,后端的代码更清晰。但如果我在我的系统中传播这种逻辑,我会担心“资源蔓延”。

所以,我想我后面有两个问题。哪种方法(如果有的话)对你来说更“安静”?如果它是第一个,是否适合以我提出的方式使用查询字符串,或者是否有更多RESTful方式来组织该URL?

对于那些被广泛使用的东西,我真的在努力处理我一直在寻找的各种各样的信息,所以你的观点非常受欢迎。

1 个答案:

答案 0 :(得分:1)

如果您选择升级/降级,或者您正在谈论您的网址格式。在幕后,后端必须进行业务并检查哪个其他资源会影响订单更改。

也就是说,创建PacketFormSortIndex看起来并不是很有用。 Waht将是对Packet或PacketFormSortIndex应用降级/提升操作之间的区别。对我来说,在语义上似乎是一样的,所以没有理由建立一个单独的实体。

最后,我会选择以下任何一种方法:

1)PUT /packet/1我只发送正在更新的字段:{"index": 3},魔法会在幕后发生......但如果我要重新开始,你应该回复更新的资源数组:

[ { "id": 1, "index": 3}, {"id":4, "index":4}]

2)确定哪些资源受影响的批量方式和逻辑在前端 PUT /packet/_bulk并发送[ { "id": 1, "index": 3}, {"id":4, "index":4}]

对我来说,如果后端性能不是问题,我认为不是,最好的解决方案是1.