如何构建区块链REST服务器 | 区块链研究实验室

原创 链三丰 区块链研究实验室 昨天

当前,区块链正在风靡一时,区块链真正的魔力是通过区块链应用于不同行业和领域而实现的众多可能性。

Hyperledger Foundation一直在创建一个属于自己的平台,其中包括一系列开源工具,库和服务,以帮助构建可扩展的,有形的区块链解决方案,特别是在企业领域。

在本教程中,我们将使用Node.js,TypeScript和一个名为iroha-helpers的特殊npm库来构建REST服务器,以便与Iroha区块链平台进行交互。

先决条件

首先,您需要在本地计算机上设置Iroha区块链平台,您可以文档中的“快速入门”指南进行设置Iroha:https : //iroha.readthedocs.io/en/main/getting_started/index.html。

在我们开始编写代码时,您需要在机器上安装了Docker,Node.js。

现在可以运行2个Docker容器:1个用于运行PostgreSQL数据库,而1个用于运行Iroha守护程序服务。

列出正在运行的Docker容器

1.建立我们的项目

我们将初始化一个新的TypeScript项目,以编写我们的Node.js REST服务器以与我们正在运行的Iroha区块链网络进行交互。

以下是设置新项目的命令:

  • npm init: 创建新项目,

  • npm install typescript:安装TypeScript,

  • npx tsc - -init:通过创建tsconfig.json创建TypeScript项目,

  • npm install express @types/express:安装Express框架的TypeScript定义。

2.安装依赖项

Hyperledger Iroha服务正在运行一个守护程序,该守护程序可以通过grpc协议发送消息来与之交互。我们可以构建一个grpc客户端以便直接与Iroha进行交互,但是Hyperledger Iroha背后的团队已经提供了一种客户端库以便与它进行交互,该语言称为iroha-helpers,我们将使用JavaScript客户端库来帮助我们与Iroha区块链服务进行交互。

我们正在使用导入iroha-helpers-ts,它本质上是iroha-helpers库的克隆,而且还进行了稍微的编辑(如果返回a,则仅返回哈希值)实际上交易已成功提交,使用原始库就可以了,或者您可以使用此编辑的版本。

npm install iroha-helpers-ts

除了该库,我们还将导入其他一些使用iroha-helpers库所必需的库,因为它使用grpc协议发送/接收请求:

grpc@improbable-eng/grpc-web-node-http-transport

3.构建我们的存储库

现在,我们来设置存储库的结构,便于之后开发代码时不会感觉繁乱。

存储库文件夹结构

  • configs-与配置REST服务器以连接到Iroha区块链服务有关的设置

  • 控制器—接收对特定路由的请求,并调用适当的服务

  • 拦截器-在每个请求之前都运行的代码

  • 接口-包含整个服务中使用的各种数据模型

  • 路由器-定义要用于每个控制器的基本路由

  • 服务-包含我们所有的业务逻辑,这是完成向Iroha后端发送请求的逻辑

  • utils-实用程序功能,可帮助在整个服务中处理数据

现在我们可以构造存储库,让我们定义控制器以接收将要发送给客户端的请求。

4.编写我们的控制器

在这里,我们正在创建一个新的控制器,称为DomainController。将负责接收对/ createDomain API调用的请求,并将其路由到Iroha命令服务方法createDomain。

编写控制器文件时,要确保定义正确的路由来处理请求,调用适当的服务以进一步为请求提供服务,然后根据来自的响应将适当的HTTP状态代码返回给客户端。

5.编写我们的配置

在此文件中,我们定义了一堆常量,这些常量充当连接到Iroha服务的配置:

  • IROHA_PEER_ADDR —运行Iroha服务的地址。

  • IROHA_DEFAULT_PRIM_KEY —这是快速入门中与Iroha一起设置的默认主键,此密钥可以代替任何适当的密钥。

  • IROHA_ACCOUNT_ID_HEADER IROHA_ACCOUNT_KEY_HEADER —这是请求标头名称,使用这些值来签署在请求中创建并发送给Iroha的交易的值。

  • IROHA_QUERY_SERVICE_TIMEOUT,IROHA_COMMAND_SERVICE_TIMEOUT-发送给Iroha的查询和命令的超时值。

  • IROHA_COMMAND_DEFAULT_QUORUM —将事务提交到区块链所需的签名数量。

现在,我们可以看到在编写服务逻辑时如何使用它们。

6.编写我们的服务

在这里,我们正在使用iroha-helpers库来帮助我们与之交互。

这来自该库的文档(https://www.npmjs.com/package/iroha-helpers),这将要创建的命令消息定义参数。发送(COMMAND_OPTIONS)并创建和初始化新的Command服务。

接下来,我们可以为此IrohaCommandService创建一个方法,该方法使用适当的命令选项将创建域请求发送到Iroha服务。


7.编写我们的路由器

我们使用路由器为所有控制器定义基本路由。然后,我们将路由连接并配置到其相应的控制器。

采取我们在DomainController中定义的路由的一部分,并在我们的路由器文件中定义的基本路由中,用于创建域的API调用的路由当前为:/ domain / createDomain。要查看完整路线,并了解服务器最终如何启动,我们将查看app.ts文件。

8.启动我们的服务器

为了使服务器运行,我们将配置我们的基本快递服务器。

在此文件中,您发现我们将服务器配置为使用morgan,这只是一个npm库,可以帮助对日志进行颜色编码。

我们将服务器配置为接收并返回JSON的内容类型,并且将此服务器的基本路由配置为以/ api / v1开头。最后我们还将服务器配置为在端口5000上运行(如果未设置环境变量port),所以,现在与使用API调用创建域的路由示例相同,我们最终将拥有:

http:// localhost:5000 / api / v1 / domain / createDomain

要立即运行服务器,我们可以运行以下命令:

npm run dev

在我们的package.json文件中对其进行配置,以运行以下命令:

LOG_LEVEL=debug nodemon src/app.ts | ./node_modules/.bin/pino-pretty”

我们使用pino来帮助记录我们的请求,并使用nodemon来使我们在对代码进行任何更改时自动重新启动服务器。

如果终端运行成功,您应该看到终端打印出以下内容:

至此,我们完成了REST服务器与Hyperledger Iroha交互的代码!

9.测试我们的REST服务器

现在,我们可以测试REST服务器,可以从命令行使用基本curl命令,但是使用Postman测试API容易得多。

我创建了一个swagger文件,该文件定义了我们在此处创建的路由。因此,您可以将此文件导入Postman,然后您将获得一个文件,该文件定义了可用于该服务的所有路由。

为了测试请求,我们设置了适当的标头,以便可以由正确的交易创建者对交易进行签名。并在请求中发送适当的正文。确保这是一个POST请求。如果它能够成功连接到Iroha,您应该得到响应,说该事务已提交到Iroha区块链网络,或者是一个错误的原因,该事务未提交(拒绝,有状态验证失败等)。

您还可以将相同的swagger文档粘贴到editor.swagger.io上,以查看所有可用的API,示例请求和响应等的视图。

swagger文件位于editor.swagger.io上

结论 

我们创建了一个小型REST服务器,该服务器接收我们的HTTP,JSON请求,并通过iroha-helpers库使用gRPC消息向Iroha发送适当的请求。

(0)

相关推荐

  • docker 中运行的 jenkins 使用 npm 构建 Node.js 应用

    配置要求 最小 256MB 内存,推荐 512MB 以上 10GB硬盘空间,用于安装 Jenkins.Docker 镜像和容器 在 Docker 中运行 Jenkins 我们在服务器上面为 jenki ...

  • 让 gRPC 提供 REST 服务

    Intro gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计. gRPC 基于 HTTP/2 标准设计,带来诸如双向流.流控.头部压缩.单 TCP 连接上的多复用请求 ...

  • 标梵看到针对未来5年的网络发展预测推断

    RichardFeldman是<ElminAction>的作者,他在2019年的ReactiveConf上预测了Web开发未来5年的发展,很有趣,分享给大家. 假如你有机会从头开始一项工程 ...

  • 如何在Polkadot构建和部署智能合约 | 区块链研究实验室

    原创 链三丰 区块链研究实验室 今天 收录于话题 #区块链技术31 #智能合约18 #区块链应用28 #区块链开发30 #区块链43 Polkadot是下一代区块链协议,它将多个专用区块链连接到一个统 ...

  • 如何使用Go构建权益区块链证明 | 区块链研究实验室

    原创 链三丰 区块链研究实验室 昨天 随着区块链给世界市场带来的革命,在作出预测之前了解基础知识至关重要.在本文中,我们将探讨权益证明的基础知识,该证明是一种区块链协议,类似于一种在区块链中伪造新区块 ...

  • 区块链研究实验室 | 如何从0构建区块链(二)

    原创 链三丰 区块链研究实验室 昨天 在上一篇文章中,我们讨论了区块链概念并构建了一个DEMO原型 [ 传送机:区块链研究实验室 | 如何从0构建区块链(一)],在这一集中,我们将使用Javascri ...

  • 区块链研究实验室 | 如何使用DNS构建无成本的区块链数据库

    原创 链三丰 区块链研究实验室 前天 区块链不仅是一个流行词.它也不限于加密货币和比特币.凭借其创造透明度和公平性的能力,这项技术正在革新各个领域.应用范围从跟踪系统到保护数据,再到执行在线投票系统. ...

  • 如何使用Truffle部署智能合约 | 区块链研究实验室

    原创 链三丰 区块链研究实验室 今天 Ťruffle是一个开发环境(提供用于编译,部署,测试和构建的命令行工具),框架(提供各种程序包以使其易于编写测试,部署代码,构建客户端等)和资产管道(发布软件包 ...

  • 创建NFT所需的知识 | 区块链研究实验室

    链三丰 区块链研究实验室 今天 与DeFi代币和初始代币发行(ICO)一样,不可替代的代币或NFT是新的加密热潮.尽管短期内大肆宣传,但一些艺术家和评论家认为NFT确实具有长期可行性. 实际上,NFT ...

  • 应用程序Python的日志记录模板 | 区块链研究实验室

    原创 链三丰 区块链研究实验室 4天前 通过定义明确,信息量大且结构方便的日志,调试和跟踪应用程序执行的理想方式. 它们是任何编程语言(不仅仅是Python)中任何大型,中型或大型项目必不可少的组成部 ...

  • 分散式应用程序的简单解释| 区块链研究实验室

    原创 链三丰 区块链研究实验室 今天 在本文中,我们将向大家解释什么是分散式应用程序(DApp)以及它的工作原理. 什么是DApp? 分散式应用程序(DApp的缩写)在前端可视化并在对等网络上执行的智 ...

  • 如何在区块链上部署链码 | 区块链研究实验室

    原创 链三丰 区块链研究实验室 今天 介绍 在本文中,我们将部署JAVA,GO,JAVASCRIPT的链代码以运行Hyperledger Fabric区块链网络. 网络设置 具有一个应用程序通道的Hy ...