拉力赛休息API交易

时间:2014-07-19 23:11:44

标签: rest transactions rally appsdk2

有没有办法使用Rally wsapi实现原子事务。我知道事务意味着连续请求中的状态,但REST显然是无状态协议。所以这可能是一个问题。

需要能够提取portfolioitem/feature,然后如果我有最新版本,则立即将其写回。我在portfolioitem/feature上有一个自定义字段,将由多个人同时编辑,我需要确保每次更新都按正确的顺序进行。

由于我无法访问Rally的服务器内容,我必须完成所有这些客户端,我无法弄清楚如何执行此操作。我将在Rally SDK中执行此操作。

2 个答案:

答案 0 :(得分:1)

我认为WS API不支持原子事务。更新作为一个原子事务发生的场景,例如,如果其中一个更新失败,则不支持全部回滚。在您提到的示例中,每次更新都是一个独特的事务,如果在不同用户更新同一工件时发生空中冲突,其中一个用户将收到并发错误。

答案 1 :(得分:0)

我和OP在同一条船上,唯一的区别是读取和后续写入之间可能会有几个小时。有趣的是,当我尝试更新记录时,我似乎只会遇到并发错误,而我的另一个事务是在飞行中。当我使用其陈旧版本更新记录时,我没有看到任何异常,即其他人已从我身下更改的记录。

我会尽快解决这个问题,因为它会成为一个问题。所选择的方法是在每次POST之前强制链接一个GET,如果I GET的记录的VersionID与我在内存中存储的那个匹配,则抛出异常。如果不匹配,它将刷新本地记录(从而查看)并提示用户重新提交其更改。是的,这对用户来说不方便,但在我的应用程序中,只需点击一下即可进行大部分更改,这是合理的。

我也想知道是否有更好的方法解决这个问题。可以假设,每个记录都有一个VersionID,它将在服务器端处理,并在客户端提供WsapiProxy的适当支持。也许我错过了一些明显的东西,比如明确获取VersionID?