2009-11-17 52 views
5

我有一个客户端界面,允许用户对树形轮廓执行多个编辑。尽管可以通过不同的URL作为单独的资源访问其部分,但我认为构成该大纲的记录总体上是单个资源(/概要/ 39)。通过REST更新结构化资源的最佳实践?

问题是用户可以编辑大纲中的现有节点以及向大纲添加新节点。通常,当您编辑某些内容时,请将其更改以及添加新内容时发布;但是,在某些情况下,您希望在单个事务中包含所有更改(包括添加和编辑)。人们如何处理这些问题有哪些实用的方法?

尽管轮廓已经存在并且PUT看起来合适,但嵌入式添加会违反PUT的幂等性。我不确定POST是否合适。出于设计目的,我决定不保存用户所做的每个独立更新,但我想这提供了一个解决方案。尽管如此,还必须有其他人处理我的问题或对此有所了解。

回答

1

有什么办法可以使添加幂等?例如。如果节点有一个自然键,那么当客户端第二次尝试添加一个节点时,你什么都不能做。

+0

没有自然键,但是这使我认为,服务器(或客户)能当我创建新的节点时,会出现临时指导。通过这种方式,记录可以通过其ID和GUID识别。通过使用GUID,如果用户未能提交整个事务,我不会最终消耗ID。在这个说明中,它引出了使用guid作为PK而不是身份种子的问题。会给它一些想法。谢谢。 – Mario 2009-11-17 19:45:20

+0

有趣!很高兴我能帮上忙。 – 2009-11-17 21:11:01

+0

经过进一步调查,我已经决定一个PUT只有永远是正确的,如果你是整个资源的投入。由于我只是将PUTTING DELETE(添加/更新/删除的节点),我认为将PUT返回到子资源URL更有意义,类似于您的事务子资源建议。我还没有弄清楚细节。 – Mario 2009-11-18 16:21:39

0

如何:创建新资源:/ outlines/39/transactions,并将您的交易发布到该资源,例如:

POST “ADDNODE =节点1,ADDNODE =节点2,editNode =节点3,了newName = foobar的” 来/概述/ 39 /交易