REST API Demo
华为云区块链提供了REST API服务来简化用户访问区块链的学习成本。通过REST API服务,用户可以不需要学习fabric-go-sdk,fabric-Java-sdk, fabric-nodejs-sdk等,只需要开发的应用支持RESTful接口,就可以轻松访问区块链。本Demo通过一个go语言的客户端来演示如何使用REST API服务调用链代码,供您学习参考。
只用于场景体验,不用于实际应用。
仅适用于Hyperledger Fabric增强版的区块链服务。
创建区块链实例
- 登录区块链服务管理控制台。
- 单击Hyperledger Fabric增强版卡片上的“购买”。
- 根据界面提示,配置区块链基本信息,参数如表1所示。
为了保证示例Demo成功运行,请在参数配置时按照表格中的参数值填写。
- 单击“下一步:资源配置”,进行资源配置,参数如表2所示。
- 单击“下一步:区块链配置”,进行区块链配置,参数如表3所示。
表3 区块链配置 参数
示例
区块链配置
选择“自定义配置”。
区块链管理初始密码
如果填写该项,则以填写值为准,如果不填写,则以资源初始密码为准。
区块链管理确认密码
-
存储卷类型
极速文件存储卷
节点组织存储容量 (GB)
使用默认规格。
账本数据存储方式
选择“文件数据库(GoLevelDB)”
peer节点组织
系统已默认创建1个节点组织,名称为organization,将节点数量修改为1。
通道配置
organization节点组织已默认添加进至通道中,保持默认即可。
共识节点数量
使用默认值。
安全机制
ECDSA
须知:安全机制仅支持选择ECDSA。
区块生成配置
否
添加RESTful API支持
请选择“是”。若您选择了“否”,则需要在实例创建完毕后,执行以下步骤安装RESTful API:
- 左侧导航栏选择“插件管理”。
- 在“插件仓库”页签下,鼠标移至baas-restapi插件卡片右上角。
- 单击“安装”,选择已购买的区块链实例,安装baas-restapi插件。
- 单击“下一步:确认订单”。
- 确认配置信息无误后,根据界面提示购买区块链实例。
请等待数分钟,安装页面提示安装成功,查看实例状态变为“正常”后,表示区块链实例部署完成。
安装及实例化链代码
- 登录区块链服务管理控制台。
- 在新创建的实例卡片中,单击“区块链管理”,登录链代码管理页面。
- 在登录页面输入用户名、密码,单击“登录”。
用户名为admin,密码为您在创建区块链实例时设置的区块链管理初始密码,如果没有设置区块链管理初始密码,则以资源初始密码为准。
- 在链代码管理页面,单击页面左上角的。
安装参数如下:
参数
值
链代码名称
bcsysq
链代码版本
1.0
账本数据存储方式
文件数据库(goleveldb)
选择全部Peer节点
勾选
组织&Peer节点
peer-0
链代码语言
Golang
链代码文件
下载示例链代码文件:chaincode_example02.zip。
链代码描述
根据需要填写相关描述。
代码安全检查
链代码语言选择Golang,该功能才会显示。选择是否开启链代码安全检查。
- 单击“安装”完成链代码安装。
- 链代码安装完成后,在链代码列表的“操作”列,单击“实例化”。
实例化参数如下:
参数
值
实例化通道
channel
链代码版本
1.0
初始化函数
init
链代码参数
a,200,b,250
背书策略
任意组织背书
背书组织列表
organization
隐私保护配置
否
配置应用
- 在“实例管理”界面,在实例卡片中,单击“获取客户端配置”。
- 勾选“Peer节点证书”,指定节点组织选择organization,勾选“用户证书”并下载。
- 下载Demo项目工程:fabric-restapi-demo.zip,并将Demo项目代码工程包下载解压到本地并使用IDE打开。
本Demo是一个golang编写的REST客户端,通过RESTAPI服务来调用链代码,实现链代码a给b转账的功能,请用GoLand等个人喜欢的IDE打开。项目的内容如下图所示:
- 将下载的用户证书解压到项目的usercrypto目录下。如图所示:
- 修改参数配置。
- 修改config目录下conf.yaml中的各项参数,参考如下截图及表格。
- 修改src/restapi目录下的main.go文件,参考如下截图及表格。
针对需要参与背书的每个peer节点,对其构造一个OrgPeer结构体,将组织ID和peer节点的域名传入,并将该结构体添加进OrgPeer类型的数组中,经json.Marshal()方法转换为字节数组,最后会转换成字符串类型传入。其中OrgPeer结构体定义如下:
type OrgPeer struct {
OrgId string `json:"orgId"`
PeerDomainName string `json:"peerDomainName"`
}
表4 参数表 参数
说明
Endpoint
RESTAPI服务的访问IP和端口。具体获取方法如下:
- 在已购买区块链实例卡片中,单击“容器集群”名称,进入云容器引擎CCE页面。
- 单击实例所在集群名称,进入集群信息页面。在左侧导航栏,单击 。
- 在“无状态负载”页签,单击baas-restapi工作负载名称,进入详情页面,然后单击实例所在节点跳转至节点管理页面获取节点的弹性公网ip,该弹性公网ip为RESTAPI服务访问IP,端口固定为32621。
Path
RESTAPI服务的访问路径,保持不变。
CryptoMethod
加密算法,如果是ECDSA算法填写“SW”。
SignCert
用户下载的证书中的签名证书路径。
PrvKey
用户下载证书中的签名私钥。
InvokeReq
请求body的参数,请按照部署的链码实际情况填写,可参考如下InvokeReq参数表。
QueryReq
与InvokeReq类似,按照部署链码的实际情况填写。
表5 InvokeReq参数表 参数
说明
范例
SignGzipSwitch
Sign是否选择Gzip压缩。0表示否,1表示是。
"1"
ChannelId
区块链通道名称。
"channel"
ChaincodeId
链代码名称。
"testcode"
ChaincodeVersion
链代码版本。
"1.0"
UserId
由组织CA签发的用户ID,目前区块链实例默认生成的都为User1。
"User1"
OrgId
区块链组织ID。
说明:在“通道管理”页面中,单击通道名称后的“查看节点”,查看“MSP标识”,去掉MSP即为区块链组织ID。例如:MSP标识为"1232b2032faafee152b58cd82cecf52e49a22a38MSP",区块链组织ID为"1232b2032faafee152b58cd82cecf52e49a22a38”。
"1232b2032faafee152b58cd82cecf52e49a22a38"
OrgPeers
各个Peer节点的组织ID和域名。
"[{OrgId:" 1232b2032faafee152b58cd82cecf52e49a22a38", PeerDomainName:"peer-1232b2032faafee152b58cd82cecf52e49a22a38-0 .peer-1232b2032faafee152b58cd82cecf52e49a22a38.default.svc.cluster.local "}]"
Opmethod
区块链链码调用类型,目前只有两类:invoke和query。
"invoke"
Args
链码调用参数。
'["invoke","a","b","100"]' (第一个参数为invoke的调用函数,可以是其他值如:move,query等等)
- 配置完成后,构建并运行main()来运行该Demo项目。
代码中将读取conf.yaml以及main.go中的参数QueryReq和InvokeReq请求,并调用RESTAPI的接口"/v1/chaincode/operation"来调用链代码,实现a给b转账功能。运行结果如下:
本Demo用一个简单的REST客户端调用RESTAPI服务实现了调用链代码,返回的invoke结果为一个base64加密的TransactionID,query结果为base64加密的数据值。代码仅供参考,可以通过该项目代码理解如何调用RESTAPI服务。