基于数据库结构生成Web服务接口之二:设计与验证
基于关系数据库结构生成Web服务接口的开源工具不少,详细如前文,在实际项目中使用其典型代表(Hasura和LoopBack)之后能深切感受到这类工具对工作效率的提升。这里尝试自行设计一个工具来基于数据库结构生成Web服务接口。
设计
工具的骨架是1-4:如支持哪些数据库,可生成哪些样式的、具有哪些具体的CRUD功能的API,使用什么程序设计语言;而5-12,是产品进一步完善的附件。如下图
本处计划自研此工具,故此做最小化设计,关注骨架部分,取其中四项指标,定义如下:
核心 | 内容限定 |
数据库 | MySQL |
API | GraphQL |
功能 |
|
语言 | 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;
验证
基于上述约定,基本可标准化如下流程:
效果如下:
参考资料
- GraphQL : https://graphql.org/
- MySQL : https://www.mysql.com/
- Python : https://www.python.org/
上一篇:用Java轻松构建你的数据库!
下一篇:软件数据库设计说明书文档