在移动过程中描述REST资源

时间:2016-08-30 06:36:46

标签: rest bitcoin atomicity blockchain

在我的应用程序中,我目前使用REST资源指向比特币区块链上的某些内容:

/channels/:pubkey/pay/:txid/:vout

txidvout路径参数包含"指针"区块链中的东西:资金来源。为了向服务器付款(来自资金来源),客户端(pubkey)对资源进行付款,其中付款包含txid / vout对上的签名有问题(加上其他一些东西)。

但是,当服务器需要使用它到目前为止从客户端收到的值时,它必须在区块链上移动上述txid / vout对,并且有一个客户需要为txid / vout对提供付款的期限,因为在交易嵌入区块链(大约需要一两个小时)之前,此举不是最终的。这一举动是原子性的,所以它要么失败要么成功,但我们不知道会发生什么,所以在此期间需要两笔付款(使用两种资源)。

因此,如果(在过渡期间)有关PUT请求在两个资源上执行,一切都很好,付款可以正常流动。否则,我们需要在底层资源结算时暂停付款。

所以我想我正在寻找一种RESTful方式来描述一个需要几个小时才能完成的原子资源移动。是否有一种方便的方式以RESTful方式处理它?或者我是否需要在应用程序协议中隐藏这种复杂性?

2 个答案:

答案 0 :(得分:2)

一次两个地方都没有资源。您有两个网址,因此您有两个资源。这些资源可能代表相同的东西"在区块链上,但客户并不知道。

如果资源已移动,则应通过返回301 Moved Permanently响应代码来指示,其中Location标头指示新网址。应该在新URL上重试客户端当时尝试的任何请求。

客户不知道"新"位置,直到使用此响应代码告知,您的API不应反映歧义。

答案 1 :(得分:0)

在事务正在进行但尚未完成时在资源上使用临时重定向,并在事务完成时将其更改为永久重定向,应具有所需的效果(确保服务器接收两个资源的必要数据) ,虽然重定向请求中的相同数据未重新提交到新资源,但必须重新计算(使用适当的txidvout参数)我们重定向的资源。

我不完全确定是否有适当的3xx HTTP状态代码指定必须重新创建请求正文以适应重定向到的特定资源(即,我们不只是将相同的请求路由到不同的资源)。