【发布时间】:2018-10-10 17:08:41
【问题描述】:
我已经使用 composer-rest-server 部署了我的业务网络,并且能够使用 postman 调用 API。
目前我有参与者/资产的硬编码 ID,因此我无法进行另一个 POST 调用,因为具有该 ID 的对象已经存在。
在哪里可以删除现有的参与者/资产?在作曲家操场上,测试页面上有一个提供此功能的删除按钮。
【问题讨论】:
标签: hyperledger hyperledger-composer
我已经使用 composer-rest-server 部署了我的业务网络,并且能够使用 postman 调用 API。
目前我有参与者/资产的硬编码 ID,因此我无法进行另一个 POST 调用,因为具有该 ID 的对象已经存在。
在哪里可以删除现有的参与者/资产?在作曲家操场上,测试页面上有一个提供此功能的删除按钮。
【问题讨论】:
标签: hyperledger hyperledger-composer
如果您使用的是 POSTMAN,则可以使用 DELETE 请求删除您的测试数据。
使用 Composer 教程中的 Trade 示例,您可以使用以下 curl 命令删除 Commodity COAL:
curl -X DELETE --header 'Accept: application/json' 'http://localhost:3000/api/Commodity/COAL'
如果您想删除业务网络中的所有数据,您可以调查composer network reset 命令。 (作曲家文档中的described here。)
【讨论】:
使用 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 内部,您可以看到。这将是运行测试的首选方法,因为这不是您创建测试数据然后删除它的正常环境,您必须小心,因为您的块数会不断增加。
【讨论】: