如何在 Hyperledger Composer 上使用 REST API 删除 assets/participants?

How to delete assets/participants using REST API on Hyperledger Composer?

我已经使用 composer-rest-server 部署了我的业务网络,并且能够使用 postman 调用 API。

现在我已经对 participants/assets 的 ID 进行了硬编码,因此我无法进行另一个 POST 调用,因为具有该 ID 的对象已经存在。

在哪里可以删除现有的participants/assets?在 composer playground 上,测试页面上有一个提供此功能的删除按钮。

如果您使用的是 POSTMAN,则可以使用 DELETE 请求删除您的测试数据。

使用 Composer 教程中的贸易示例,您可以使用以下 curl 命令删除商品 COAL:

curl -X DELETE --header 'Accept: application/json' 'http://localhost:3000/api/Commodity/COAL'

如果您想删除业务网络中的所有数据,您可以调查 composer network reset 命令。 (described here 在 Composer 文档中。)

使用 javascript composer-client,您可以执行以下操作:

const { BusinessNetworkConnection } = require('composer-client');

const participantRegistry = await BusinessNetworkConnection.getParticipantRegistry(registry name space, type);

await participantRegistry.remove(registry name space#participantId);

const assetRegistry = await BusinessNetworkConnection.getAssetRegistry(registry name space);

await assetRegistry.remove(registry name space#asset id);

甚至你可以执行更多

   await assetRegistry.removeAll(registry name space);

然而,在从注册表中删除参与者之前,您应该通过执行以下操作来撤销对其的绑定身份:

const IdentityRevoke = require('composer-cli').Identity.Revoke;

let options = {
   card: 'admin@tutorial-network',
   identityId: 'f1c5b9fe136d7f2d31b927e0dcb745499aa039b201f83fe34e243f36e1984862'
 };

IdentityRevoke.handler(options);

您可以在以下 link

文档中找到有关撤销身份的更多信息

既然您已经部署了 API,请使用它的 Swagger 界面看看您可以做什么。它是一个 RESTful api,这意味着每个端点都接受对其有意义的 HTTP 动词。

例如,每个资产和参与者端点都接受 DELETE 请求,您只需传递要删除的实体的 ID。

您可以发出 POST 请求来创建新数据和 PUT 请求来更新数据。

需要注意的一件事是每个请求都会在分类帐上创建一个新块。 DELETE 并不意味着之前的区块消失,它只是意味着它处于删除状态,并且您发出的每笔交易的区块计数都在不断增加。

如果您想 运行 测试并确保资产创建正确,那么您可以开始使用功能文件,这里有一个示例功能可以帮助您入门。它使用特定的 composer cucumber 包,你可以在 package.json 里面看到。这将是 运行 测试的首选方法,因为这不是您创建测试数据然后删除它的正常环境,您必须小心,因为您的块数会不断增加。