概述
通过REST接口来访问区块链网络,可以屏蔽底层区块链网络的复杂性,减低开发Dapp的难度,快速开发基于区块链的应用。
Fabric官方已经开始提供访问Fabric网络的REST接口,但该接口目前还不是太完善,官方文档明确说明会在后续版本release这些功能。可以参考这里的官方说明。
根据官方文档可以看出,到目前为止,release的版本中只提供了node和java的SDK,那么我们可以通过这些SDK来封装区块链基础服务。在Fabric的源码中,我们也可以找到相应的例子,本文是基于fabric-sample中已经封装好的REST接口来说明如何通过REST接口来访问Fabric网络。
环境准备
安装fabric区块链网络
可以参考我写的这篇文章,或者个人博客先搭建好一个基本的区块链网络,并保证能够正常运行。
注意:node的版本,不能使用最新的版本,我这里使用的node是v8.11.3,配套的npm版本是:5.6.0,当换成10+以上版本时,就会报错。
安装依赖包
进入fabric-sample的balance-transfer目录,可以看到该目录下有以下文件:
文件名 | 说明 |
---|---|
runApp.sh | 启动区块链rest服务的脚本,该脚本会启动app.js |
app.js | 通过node代码实现fabric的REST接口,node的实现类是app |
testAPIs.sh | 测试node的REST接口的脚本,其实就是通过curl发送http请求,来测试REST接口 |
进入目录后安装node的依赖包,
cd fabric-samples/balance-transfer
npm install
在安装依赖包时会遇到各种问题,解决办法可以查看后面的问题解决章节。也可以直接通过命令:
npm install --unsafe-perm
启动REST服务
在app.js中已经给我封装好了一些REST接口,我们只需要把它启动起来就可以了:
./runApp.sh
若显示以下信息,就表示我们的服务启动正确了:
Creating network "artifacts_default" with the default driver
Creating ca_peerOrg2 ... done
Creating orderer.example.com ... done
Creating ca_peerOrg1 ... done
Creating peer0.org2.example.com ... done
Creating peer1.org2.example.com ... done
Creating peer1.org1.example.com ... done
Creating peer0.org1.example.com ... done
============== node modules installed already =============
[2018-07-23 18:44:36.082] [INFO] SampleWebApp - ****************** SERVER STARTED ************************
[2018-07-23 18:44:36.083] [INFO] SampleWebApp - *************** http://localhost:4000 ******************
通过REST接口来访问Fabric网络
这里我们可以手动运行一个官方的测试脚本把REST接口全面测试以下,都测试通过后,就可以对各个请求的实现进行进一步研究了。要测试REST服务接口是否可用,很简单,只需要运行testAPIs.sh这个脚本就可以了。
另外开启一个终端:
cd fabric-samples/balance-transfer
./testAPIs.sh
运行过程中可以看一些输出,若没有报错,会继续打印一些信息,若输出以下信息,说明全部测试通过:
... ...
GET query Channels
{"channels":[{"channel_id":"mychannel"}]}
Total execution time : 68 secs ...
接下来:
- 打开脚本testAPIs.sh,查看如何通过REST接口来访问Fabric网络。
- 打开app.js,查看每个接口是如何实现的
遇到的问题和解决办法
安装依赖包
错误1
在fabric-samples/balance-transfer目录中,运行npm install,得到以下的信息:
> dtrace-provider@0.8.7 install /root/opensrc/fabric-samples/balance-transfer/node_modules/dtrace-provider
> node-gyp rebuild || node suppress-error.js
解决办法
sudo npm install dtrace-provider --unsafe-perm
错误2
不断打印以下错误信息
gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/opensrc/fabric-samples/balance-transfer/node_modules/grpc/.node-gyp/10.6.0"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/root/opensrc/fabric-samples/balance-transfer/node_modules/grpc/.node-gyp"
从上面的错误看出,是安装grpc时出了问题,解决的方法有很多,可以参考以下的办法。
或者可以按以下方式解决:
sudo npm install gprc --unsafe-perm
总结
本文介绍了如何通过REST接口来访问Fabric网络,主要是基于官方提供的fabric-sample中的例子进行说明的。在跑通本文描述的最简单的场景后,就可以在此基础上进一步学习如何使用node的sdk来访问Fabric网络,学习REST接口的具体实现。
另外,要注意node的版本,若是按照正规流程还是出现这样那样的错误,可以替换包的版本试试。