大家好今天我想跟大家分享一个有用的工具 - DB REST
这个工具的主要作用,就是快速的把数据库的访问公开为restful API。以下是具体的说明:
产品特色
-
无代码,开放数据库常见CRUD接口
-
低代码,会写SQL就能扩展更多功能
-
可扩展,通过
go template
模板,可以定义满足复杂要求的功能开发 -
稳定高效,以最低的成本提高最高效的数据库访问
产品功能
-
集成网站
-
参数化SQL
-
基于模板传递参数
-
日志统计
技术实现
本软件使用golang开发,可以通过go template
定义数据库执行脚本,快捷提供REST数据访问接口。
安装
直接下载:
- [Windows](https://byeap.com/download/db.win.zip)
- [Linux](https://byeap.com/download/db.linux.zip)
开源地址:https://github.com/openyeap/db
使用方法
启动
db --help -dsn string PostgreSQL DSN (default "user=postgres password=postgres dbname=dev sslmode=disable host=localhost port=5432") -env string Environment (dev|uat|prd) (default "dev") -port int API server port (default 5050)
检测
curl http://localhost:5050/api/test/echo?t&id=1&name=test
开发过程
正常情况下安装软件,连接到数据库,可即可完成数据库的CRUD常规接口。这里主要介绍通过SQL脚本开发更多定制功能接口。
创建脚本规则
在SQL
目录创建SQL文件时,需要理解SQL文件相对于SQL
目录的路径就是请求路径。
同时,通过以下文件命名规则,指示请求不同格式的结果返回:
-
文件命名以 once 结尾 返回影响行
-
文件命名以 first 结尾 返回第一条数据
-
文件命名以 more 结尾 返回多对象集合
-
文件命名以 csv 结尾 返回单对象集合文件
-
文件命名以 zip 结尾 返回多对象集合文件
-
文件命名以 other 结尾 返回单对象集合
模板引擎
在SQL文件中使用 go template
语法,具体语法参考:GO模板语法
在模板中可以使用以下对象访问接口请求参数:
{{.query}} - 访问请求参数对象 {{.body}} - 访问请求体的JSON对象 {{.form}} - 访问请求表体对象 {{.header}} - 访问请求头参数对象
为了简化开发,还可以使用以下内置函数:
-
todo
-
wip
代码生成
除了手动编写脚本,还可以通过自动化工具生成,参考:GitHub - openyeap/cg
遵守以上规则,理论上就能完成功能开发,但这里给出一些最佳实践建议:
推荐
-
文件路径名
FilePath
,建议按主模块,子模块与功能三级方式组织。比如:/system/user/create_once.sql。 -
使得HTTP的
GET
请求时,建议使用请求参数,通过query
获取请求参数。 -
使得HTTP的
POST
请求时,建议使用请求头:content-type: application/json
,通过body
读取提交内容。
不推荐
-
不建议使用
DELETE
,PUT
等不常用HTTP方法。 -
不建议在
GET
中提交body -
不建议
存储查询
推荐使用存储查询方式编写SQL,格式如下:
-- EXECUTE PREPARE_QUERY('{{ index .query.name 0 }}', '2023-03-12 23:12') -- PREPARE PREPARE_QUERY(text, timestamp) AS insert into t_user(nick_name, rev, updated_ts, created_ts) values ($1, '{0,1,t,f}', $2, now());
第一行以-- EXECUTE PREPARE_QUERY
开头,定义了存储查询具体参数;
第二行以-- PREPARE PREPARE_QUERY
开头,定义了存储查询具体内容。
这样做的好处是,在开发过程中,可以通过&t打印出来完成的SQL,使用开发时直接调试。