sqler sql 转rest api 2.0 试用
Posted rongfengliang-荣锋亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqler sql 转rest api 2.0 试用相关的知识,希望对你有一定的参考价值。
sqler 的迭代还是很快的,已经2.0 了,2.0 有好多新功能的添加,同时也有好多不兼容的修改
说明: 测试使用docker-compose,同时我已经push 了docker 镜像 dalongrong/sqler
发布说明
- 添加 aggregate
- 移除 authorizers hooks
- 添加 authorizer script
- 移除 rules
- 添加 validators as array of scripts
- 添加 Go text/template
- 添加 include
- 添加 bind
环境准备
- docker-compose 文件
version: "3"
services:
sqler:
image: dalongrong/sqler:2.0
volumes:
- "./config/config-2-0-example.hcl:/app/config.example.hcl"
environment:
- "DSN=root:[email protected](mysqldb:3306)/test?multiStatements=true"
ports:
- "3678:3678"
- "8025:8025"
mysqldb:
image: mysql:5.7.16
ports:
- 3306:3306
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: dalongrong
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
TZ: Asia/Shanghai
- 配置说明
使用了2.0 的参考配置,为了方便,我注释了授权的处理
// create a macro/endpoint called "_boot",
// this macro is private "used within other macros"
// because it starts with "_".
_boot {
// the query we want to execute
exec = <<SQL
CREATE TABLE IF NOT EXISTS `users` (
`ID` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(30) DEFAULT "@anonymous",
`email` VARCHAR(30) DEFAULT "@anonymous",
`password` VARCHAR(200) DEFAULT "",
`time` INT UNSIGNED
);
SQL
}
?
// adduser macro/endpoint, just hit `/adduser` with
// a `?user_name=&user_email=` or json `POST` request
// with the same fields.
adduser {
validators {
user_name_is_empty = "$input.user_name && $input.user_name.trim().length > 0"
user_email_is_empty = "$input.user_email && $input.user_email.trim(‘ ‘).length > 0"
user_password_is_not_ok = "$input.user_password && $input.user_password.trim(‘ ‘).length > 5"
}
?
bind {
name = "$input.user_name"
email = "$input.user_email"
password = "$input.user_password"
}
?
methods = ["POST"]
?
// authorizer = <<JS
// (function(){
// log("use this for debugging")
// token = $input.http_authorization
// response = fetch("http://requestbin.fullcontact.com/zxpjigzx", {
// headers: {
// "Authorization": token
// }
// })
// if ( response.statusCode != 200 ) {
// return false
// }
// return true
// })()
// JS
?
// include some macros we declared before
include = ["_boot"]
?
exec = <<SQL
INSERT INTO users(name, email, password, time) VALUES(:name, :email, :password, UNIX_TIMESTAMP());
SELECT * FROM users WHERE id = LAST_INSERT_ID();
SQL
}
?
// list all databases, and run a transformer function
databases {
exec = "SHOW DATABASES"
}
?
// list all tables from all databases
tables {
exec = "SELECT `table_schema` as `database`, `table_name` as `table` FROM INFORMATION_SCHEMA.tables"
}
?
// a macro that aggregates `databases` macro and `tables` macro into one macro
databases_tables {
aggregate = ["databases", "tables"]
}
运行&&测试
- 启动
docker-compose up -d
- 测试
添加数据
curl -X POST
http://localhost:8025/adduser
-H ‘Content-Type: application/json‘
-H ‘Postman-Token: a7784ea1-9f50-46ee-92ac-1d850334f3f1‘
-H ‘cache-control: no-cache‘
-d ‘{
"user_name":"dalong",
"user_email":"[email protected]",
"user_password":"dalongdemo"
}‘
返回结果
curl -X POST
http://localhost:8025/adduser
-H ‘Content-Type: application/json‘
-H ‘Postman-Token: a7784ea1-9f50-46ee-92ac-1d850334f3f1‘
-H ‘cache-control: no-cache‘
-d ‘{
"user_name":"dalong",
"user_email":"[email protected]",
"user_password":"dalongdemo"
}‘
{"data":[{"ID":2,"email":"[email protected]","name":"dalong","password":"dalongdemo","time":1547433588}],"success":true}%
- 聚合功能试用
curl http://localhost:8025/databases_tables | jq
返回结果
数据比较多,截取部分
{
"data": {
"databases": [
{
"Database": "information_schema"
},
{
"Database": "mysql"
},
{
"Database": "performance_schema"
},
{
"Database": "sys"
},
{
"Database": "test"
}
],
。。。。。。
- redis 集成
使用redis_cli
redis-cli -p 3678
列出宏列表
list
1) "tables"
2) "databases_tables"
3) "_boot"
4) "adduser"
5) "databases"
调用宏
databases_tables
数据较多,返回部分
databases_tables
1) (integer) 1
2) "{"databases":[{"Database":"information_schema"},{"Database":"mysql"},{"Database":"performance_schema"},{"Database":"sys"},{"Database":"test"}],"tables":[{"database":"information_schema","table":"CHARACTER_SETS"},{"database":"information_schema","table":"COLLATIONS"},{"database":"information_s
说明
2.0 的功能是越来越方便了
参考资料
https://github.com/alash3al/sqler
https://github.com/rongfengliang/sqler-docker-compose
https://cloud.docker.com/repository/docker/dalongrong/sqler/
以上是关于sqler sql 转rest api 2.0 试用的主要内容,如果未能解决你的问题,请参考以下文章
sqler sql 转rest api 源码解析macro 的执行
sqler sql 转rest api 的docker 镜像构建(续)使用源码编译