通过REST更新结构化资源的最佳实践?

通过REST更新结构化资源的最佳实践?,rest,Rest,我有一个客户端界面,允许用户对树状轮廓进行多次编辑。我认为在总体上,记录的汇总构成了一个单一的资源(/大纲/ 39),即使它的部分可以通过不同的URL作为单独的资源访问。 问题是用户可以编辑大纲中的现有节点,也可以向大纲中添加新节点。通常,当你编辑某样东西时,你会把它的变化放进去;当你添加新东西时,你会把它贴出来;但是,在某些情况下,您需要将所有更改(包括添加和编辑)打包到单个事务中。人们处理这件事的一些实际方法是什么 即使大纲已经存在,而且PUT似乎合适,嵌入的ADD也违反了PUT的幂等性。我

我有一个客户端界面,允许用户对树状轮廓进行多次编辑。我认为在总体上,记录的汇总构成了一个单一的资源(/大纲/ 39),即使它的部分可以通过不同的URL作为单独的资源访问。 问题是用户可以编辑大纲中的现有节点,也可以向大纲中添加新节点。通常,当你编辑某样东西时,你会把它的变化放进去;当你添加新东西时,你会把它贴出来;但是,在某些情况下,您需要将所有更改(包括添加和编辑)打包到单个事务中。人们处理这件事的一些实际方法是什么


即使大纲已经存在,而且PUT似乎合适,嵌入的ADD也违反了PUT的幂等性。我也不确定这个帖子是否合适。出于设计目的,我决定不保存用户进行的每个离散更新,尽管我想这提供了一个解决方案。不过,肯定还有其他人处理过我的问题或对此有想法。

有什么方法可以使加法幂等式?例如,如果节点具有自然密钥,那么当客户端第二次尝试添加节点时,您将无能为力。

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


帖子“AdNoTeNo.NoDE1,AddioTeNo.NoDE2,EddieNosieNoDE3,NeNeX= FooBar”to /大纲/ 39/事务< /P>没有自然密钥,但这使我考虑到服务器(或客户端)可以在创建新节点时剔除临时GUID。这样,记录就可以通过其id和guid进行识别。通过使用guid,如果用户未能提交整个事务,我不会使用id。在这一点上,它回避了使用guid作为PK而不是标识种子的问题。我会考虑一下。谢谢,很有趣!很高兴我能帮上忙。经过进一步的调查,我决定只有当你把资源全部放进去的时候,卖出期权才是正确的。因为我只是将增量(添加/更新/删除的节点)放回原处,所以我认为将增量放回子资源URL更有意义,类似于您的事务子资源建议。我还没有弄清楚细节。