Amazon web services 如何使用Hyperledger go SDK将链码API公开为REST

Amazon web services 如何使用Hyperledger go SDK将链码API公开为REST,amazon-web-services,hyperledger-fabric,hyperledger,hyperledger-chaincode,Amazon Web Services,Hyperledger Fabric,Hyperledger,Hyperledger Chaincode,我们已经在亚马逊管理的区块链网络上配置了hyperledger Fabric 1.2。我们按照8个步骤指南配置此设置。 我们已经配置了网络、成员和对等,VPC服务端点也已设置。Fabric Client VM也在AWS Linux 2 AMI上配置,我们还可以安装/启动和调用示例链代码(如上所述)。 现在我们的障碍是如何将API公开为rest,以便可以从Fabric客户端VM外部访问该API。我们已经挣扎了很多天了 根据AWS教程(步骤7.4:调用链码),我们使用以下命令调用链码 docker

我们已经在亚马逊管理的区块链网络上配置了hyperledger Fabric 1.2。我们按照8个步骤指南配置此设置。 我们已经配置了网络、成员和对等,VPC服务端点也已设置。Fabric Client VM也在AWS Linux 2 AMI上配置,我们还可以安装/启动和调用示例链代码(如上所述)。 现在我们的障碍是如何将API公开为rest,以便可以从Fabric客户端VM外部访问该API。我们已经挣扎了很多天了

根据AWS教程(步骤7.4:调用链码),我们使用以下命令调用链码

docker exec -e "CORE_PEER_TLS_ENABLED=true" -e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem"  -e "CORE_PEER_ADDRESS=$PEER"  -e "CORE_PEER_LOCALMSPID=$MSP"  -e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH"  cli peer chaincode invoke -C mychannel  -n mycc -c  '{"Args":["invoke","a","b","10"]}'  -o $ORDERER --cafile /opt/home/managedblockchain-tls-chain.pem --tls
我试着在($PEER)上发送邮递员的邮件请求

有效载荷:
{“Args”:[“invoke”、“a”、“b”、“10”]}
但有一个错误: 没有得到任何回应 连接到时出错

NDNDNDNDND.m-mmmmmmmm-n-nnnnnnnnnnnnnn.managedblockchain.us-east-1.amazonaws.com:30003/mycc

我们如何使用这些参数从这个VM外部调用这个API作为REST调用

默认情况下已安装Hyperledger 1.2 go SDK,您能否建议我们如何使用go SDK将链码API公开为REST?
我们知道,要启用前端和Hyperledger结构层之间的通信,其中一种方法是gRPC调用,但不知道如何配置和使用gRPC for Go。

根据您的解释,您似乎已正确设置Hyperledger结构网络。当您能够通过CLI安装、实例化和调用链码时

因此,让我们来回答您的问题,Hyperledger Fabric为我们提供了两种类型的操作机制,即通过CLI和通过RPC(使用grpc)。您可以使用Hyperledger结构SDK(节点SDK、Java SDK、GO SDK等),这些SDK提供了实现Hyperledger网络RPC方法的库

因此,您可以用任何受支持的语言构建web应用程序(Rest/Soap)。以下是SDK的链接:-

以下是Hyperledger fabric web应用程序的示例:-


我建议您查看余额转移示例。

您可以使用fabric go sdk将链码api作为rest公开。

通过链码调用函数可以通过CLI或使用sdk完成

我在Golang编写SDK时遵循了这一点

本教程中未公开RESTAPI。为了生成RESTAPI,我在我的一个项目中使用了。Gorilla/mux用于下面代码的底部:

package main

import (
    "encoding/json"
    "fmt"
    "github.com/chainHero/heroes-service/blockchain"
    "net/http"
    "github.com/gorilla/mux"
    "os"
    "log"
)

func main() {
    // Definition of the Fabric SDK properties
    fSetup := blockchain.FabricSetup{
        // Network parameters
        OrdererID: "orderer.hf.chainhero.io",

        // Channel parameters
        ChannelID:     "chainhero",
        ChannelConfig: os.Getenv("GOPATH") + "/src/github.com/chainHero/heroes-service/fixtures/artifacts/chainhero.channel.tx",

        // Chaincode parameters
        ChainCodeID:     "heroes-service",
        ChaincodeGoPath: os.Getenv("GOPATH"),
        ChaincodePath:   "github.com/chainHero/heroes-service/chaincode/",
        OrgAdmin:        "Admin",
        OrgName:         "org1",
        ConfigFile:      "config.yaml",

        // User parameters
        UserName: "User1",
    }

    // Initialization of the Fabric SDK from the previously set properties
    err := fSetup.Initialize()
    if err != nil {
        fmt.Printf("Unable to initialize the Fabric SDK: %v\n", err)
        return
    }
    // Close SDK
    defer fSetup.CloseSDK()

    // Install and instantiate the chaincode
    err = fSetup.InstallAndInstantiateCC()
    if err != nil {
        fmt.Printf("Unable to install and instantiate the chaincode: %v\n", err)
        return
    }

    router := mux.NewRouter()

    //GetPerson and CreatePerson are the functions implemented in the chaincode.

    router.HandleFunc("/api/{fcn}",fSetup.GetPerson).Methods("GET")
    router.HandleFunc("/api/{fcn}", fSetup.CreatePerson).Methods("POST")

    log.Fatal(http.ListenAndServe(":8000", router))

}


感谢Ankit发送链接,您是否有任何特殊示例(使用grpc和GO)?