从0开始学DX Mesh第五天--使用DX Mesh搭建操作数据库工程
组织介绍
DigQuant Technology点宽科技开源项目:
Direct Exchange Mesh (DX Mesh) for Web 3.0 - 面向 Web3.0 的分布式应用架构
历史沿袭
DX Mesh是由DQtech团队提出的“RPC网络+区块链网络“的双层网络设计思路,在此设计概论基础上,DX Mesh项目进行了大胆的设计,一个新的”Dual Network Architecture(DNA)“网络结构被提出。
开源项目链接:https://gitee.com/DXmesh
xComPython组件构建DatabaseService工程
整体思路
一、使用Protobuf3编写所需要的接口函数–AddUser、DeleteUser、UpdateUser、GetUserList
二、使用xbuilder命令对Protobuff3接口进行转换并初始化工程
三、编写DAO.py文件实现数据库操作的功能,编写service.py调用DAO.py文件进行功能实现和结果反馈
四、使用xPort启动127.0.0.1:8090监听端监听127.0.0.1:8091服务端
五、服务端向xPort发起操作数据库请求,xPort把请求发送给监听端
六、监听端启动DatabaseService工程并实现操作数据库,并结果反馈给xPort,xPort再把结果反馈给服务端
前期准备
需要简单的Protobuf3的接口编程基础,Protobuf3是什么(具体信息见:https://protobuf.dev/programming-guides/proto3/)
需要简单的数据库编程基础。数据库安装教程见:数据库安装保姆级连接
第一步–Protobuf3接口编写
首先,创建一个项目文件夹DatabaseService,然后运行以下代码初始初始化工程:
xbuilder new -n DatabaseService
可以看到这里生成一个source_api_0_0_1.proto文件,这里默认提供了一个SayHello的接口。
接下来,把source_api_0_0_1.proto文件内容修改编写成需要的数据库操作接口:
增加数据接口–AddUser
删除数据接口–DeleteUser
更新数据接口–UpdateUser
查询数据接口–GetUserList
第二步–初始DatabaseService工程
接下来,在终端运行以下代码初始化DatabaseService工程,这里选择使用python语言来调用接口:
xbuilder init -l py
可以看到D:\dxmesh1\xComPythonLib\DatabaseService下生成了src的初始化文件:
打开src文件夹下的service.py,可以看到编写的接口已经通过xbuider初始化好了:
第三步–python接口编写
一、这里创建了一个DAO.py文件编实现数据库操作功能
(1)编写了init_dable()函数对数据库表初始化功能,数据库表名为databaseservice_0_0_1_user:
(2)编写了add_user()、delete_user()、update_user()、get_user_list()四个函数分别实现增、删、改、查功能:
二、对service.py文件进行编写,调用了DAO.py数据库操作函数并传入相对于的参数
(1)调用了DAO文件里面的init_table()函数对数据库表进行初始化:
(2)调用了DAO文件的add_user()、delete_user()、update_user()、get_user_list()进行增、删、改、查并接收返回的参数:
第四步–启动xPort操作数据库
一、打包安装DatabaseService工程
运行以下代码对编写的DatabaseService工程进行打包:
xbuilder pack
可以看到生成了DatabaseService_0_0_1.dxc和import_api_DatabaseService_0_0_1.proto文件。
接下来,运行以下代码把DatabaseService_0_0_1.dxc安装到xPort文件夹上:
xbuilder install -x xxx
可以看到已经成功安装到了xPort文件夹上:
二、启动xPort调用DatabaseService工程
在终端运行以下代码启动xPort(127.0.0.1:8090监听端监听127.0.0.1:8091服务端):
cargo run
使用postman调用XComService监听下的DatabaseService工程:
可以看到,DatabaseService已经连接上了xPort(由服务端向监听端发起启动工程请求):
可以看到,数据库也生成了一个databaseservice_0_0_1_user的数据库表:
三、增加数据功能实现
调用AddUser的接口增加一列{“name”:“王五”},{“age”:19}到databaseservice_0_0_1_user数据库表(由服务端向监听端发起增加请求):
可以看到,xPort把增加数据功能的日志打印出来了,并且把“增加成功”结果反馈给服务端。
可以看到,{“name”:“王五”},{“age”:“19”}成功增加到了databaseservice_0_0_1_user数据库表中:
四、删除数据功能实现
这是未删除数据前的databaseservice_0_0_1_user表:
调用DeleteUser接口把id=3这一列删除(由服务端向监听端发起删除请求):
可以看到,xPort把删除数据功能的日志打印出来了,并且把“删除成功”结果反馈给服务端。
这是删除数据后的databaseservice_0_0_1_user表,可以看见id=3这一列已经被成功删除:
五、更新数据功能实现
这是未更新数据前的databaseservice_0_0_1_user表:
调用UpdateUser接口把id=4这一列更新成{“name”:王五},{“age”:21}(由服务端向监听端发起更新请求):
可以看到,xPort把更新数据功能的日志打印出来了,并且把“更新成功”结果反馈给服务端。
这是进行更新数据后的databaseservice_0_0_1_user表:
六、查询数据功能实现
调用GetUserList接口查询databaseservice_0_0_1_user表里的所有数据(由服务端向监听端发起查询请求):
可以看到,xPort把查询数据功能的日志打印出来了,并且把查询的结果反馈给服务端。
第六天预告
DX Mesh的protobuf接口讲解和简单的protobuf编程。
若对DX Mesh架构和实操过程中有任何问题,可评论、私信、邮箱或者加下列微信和我一起探讨学习(我的邮箱:2195745704@qq.com):