基于数据库结构生成Web服务接口之二:设计与验证

基于数据库结构生成Web服务接口之二:设计与验证

技术教程gslnedu2025-01-12 12:14:3113A+A-

基于关系数据库结构生成Web服务接口的开源工具不少,详细如前文,在实际项目中使用其典型代表(Hasura和LoopBack)之后能深切感受到这类工具对工作效率的提升。这里尝试自行设计一个工具来基于数据库结构生成Web服务接口。



设计

工具的骨架是1-4:如支持哪些数据库,可生成哪些样式的、具有哪些具体的CRUD功能的API,使用什么程序设计语言;而5-12,是产品进一步完善的附件。如下图

本处计划自研此工具,故此做最小化设计,关注骨架部分,取其中四项指标,定义如下:

核心

内容限定

数据库

MySQL

API

GraphQL

功能

  1. GetAll : 获取指定表的所有数据,支持分页
  2. GetByIndex : 按照指定索引获取数据,支持分页
  3. Delete :删除指定主键的数据,主键可以是一个集合
  4. Add :增加一组数据,当数据存在则丢弃
  5. Update :修改一组数据,当数据不存在则丢弃
  6. Replace :替换一组数据,当数据存在时更新,当数据不存在时增加

语言

Python

基于上述限定,需求进一步明确和缩小,但是还需要进一步确定使用场景,包括由谁使用,如何使用,成功后获得的效果。定义如下:

Python用来测试有很好的生态,如下是相关的技术选型


CODER本身是一个代码生成工具,基于数据库表结构生成提供WebAPI的python代码。数据库的表结构通过创建表的SQL语句获得,字段类型、索引、唯一索引和主键都可以获得,能支持CODER的工作。

CREATE TABLE `t_ciyu` (
  `f_id` int(11) NOT NULL AUTO_INCREMENT,
  `f_ciyu` char(32) NOT NULL,
  `f_pinyin` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `f_sound_url` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `f_meaning` varchar(1024) CHARACTER SET utf8 DEFAULT NULL,
  `f_example` varchar(2048) CHARACTER SET utf8 DEFAULT NULL,
  `f_create_time` datetime DEFAULT NULL,
  `f_modify_time` datetime DEFAULT NULL,
  `f_userid_create` varchar(64) CHARACTER SET utf8 DEFAULT NULL,
  `f_userid_modify` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `f_synonyms` varchar(1024) DEFAULT NULL,
  `f_antonyms` varchar(1024) DEFAULT NULL,
  `f_state` int(10) unsigned zerofill DEFAULT '0000000000',
  PRIMARY KEY (`f_id`) USING BTREE,
  UNIQUE KEY `unique_ciyu_pinyin` (`f_ciyu`,`f_pinyin`) USING BTREE,
  KEY `index_ciyu` (`f_ciyu`) USING BTREE,
  KEY `index_pinyin` (`f_pinyin`) USING BTREE,
  KEY `index_creator_time` (`f_userid_create`,`f_create_time`) USING BTREE,
  KEY `index_modify_time` (`f_userid_modify`,`f_modify_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=239806 DEFAULT CHARSET=utf8mb4

连接上数据库后,需要授予相关的权限,例如如下语句:

# 获取表字段信息
use db_xdb
show TABLES;
DESCRIBE t_ciyu;

# 获取表字段、索引的结构化信息
SELECT *
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 't_ciyu'
  AND TABLE_SCHEMA = 'db_dictation';
	
	SHOW INDEX FROM t_ciyu;

# 直接分析创建表的sql
SHOW CREATE TABLE t_ciyu;

验证

基于上述约定,基本可标准化如下流程:

效果如下:



参考资料

  1. GraphQL : https://graphql.org/
  2. MySQL : https://www.mysql.com/
  3. Python : https://www.python.org/


点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8