【问题标题】:How to delete assets/participants using REST API on Hyperledger Composer?如何在 Hyperledger Composer 上使用 REST API 删除资产/参与者?
【发布时间】:2018-10-10 17:08:41
【问题描述】:

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

目前我有参与者/资产的硬编码 ID,因此我无法进行另一个 POST 调用,因为具有该 ID 的对象已经存在。

在哪里可以删除现有的参与者/资产?在作曲家操场上,测试页面上有一个提供此功能的删除按钮。

【问题讨论】:

    标签: hyperledger hyperledger-composer


    【解决方案1】:

    如果您使用的是 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。)

    【讨论】:

      【解决方案2】:

      使用 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 的文档中找到有关撤销身份的更多信息

      【讨论】:

        【解决方案3】:

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

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

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

        需要注意的一点是,每个请求都会在账本上创建一个新块。 DELETE 并不意味着前一个区块消失了,它只是意味着它处于已删除状态,并且您的区块数随着您发出的每笔交易而不断增加。

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

        【讨论】: