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:dalongrong@tcp(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":"1141591465@qq.com",
"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":"1141591465@qq.com",
"user_password":"dalongdemo"
}'
{"data":[{"ID":2,"email":"1141591465@qq.com","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 的工具试用
sqler 从开源很快就获取了1k的star,使用起来很方便,而且也很灵活,支持的数据库也比较多. 支持的功能 无需依赖,可独立使用: 支持多种数据可类型,包括:SQL Server, MYSQL, ...
- sqler sql 转rest api 源码解析(一)应用的启动入口
sqler sql 转rest api 的源码还是比较简单的,没有比较复杂的设计,大部分都是基于开源 模块实现的. 说明: 当前的版本为2.0,代码使用go mod 进行包管理,如果本地运行注意gol ...
- sqler sql 转rest api javascript 试用
sqler 内嵌了一个js 引擎的实现(基于goja,当我们配置了exec的配置之后 调用宏(redis 接口)或者rest api 的时候会有一个全局变量$result ,保存了执行的结果,我们可以 ...
- sqler sql 转rest api 数据聚合操作
sqler 2.0 提供了一个新的指令aggregate,注意这个和sql 的聚合函数不是一个概念,这个只是为了 方便api数据的拼接 参考格式 databases { exec = &qu ...
- sqler sql 转rest api redis 接口使用
sqler 支持redis 协议,我们可以用过redis client 连接sqler,他会将宏住转换为redis command 实现上看源码我们发现是基于一个开源的redis 协议的golang ...
- sqler sql 转rest api 源码解析(四)macro 的执行
macro 说明 macro 是sqler 的核心,当前的处理流程为授权处理,数据校验,依赖执行(include),聚合处理,数据转换 处理,sql 执行以及sql 参数绑定 授权处理 这个是通过go ...
- sqler sql 转rest api 数据校验的处理
早期版本(2.0 之前)使用rules 进行数据校验处理,2.0 之后进行了修改使用 validators,这样更加明确 参考格式 addpost { // if any rule retu ...
- sqler sql 转rest api 防止sql 注入
sqler 对于sql Sanitization 的处理,我们可以使用bind 指令 说明: 这个是2.0 的功能,注意版本的使用 参考格式 addpost { // $input is a ...
- sqler sql 转rest api 授权处理
我们可以使用内置的authorizer 以及js 脚本,方便的进行api 接口的授权处理 说明: 这个是2.0 的功能,注意版本的使用 参考格式 addpost { authorizer = & ...
随机推荐
- 字符与字符串3——char 的大小
字符变量占用内存的大小,也就是char类型声明的变量,这个变量占多少字节. 一字节 char c = 'A'; printf("%d,%d\n", sizeof(c),sizeof ...
- PSP0级记录2
上课 编写程序 课外资料 日总计 3.13 周一 ...
- java动手动脑3
2016-10-152016-10-15一.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 生成50个1到10的随机整数. value=a+(int)(Math.Random() ...
- Android : SELinux 简析&修改
一 SELinux背景知识 SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制.DAC的核心思想很简单,就是: ...
- SecureCRT使用(转)
功能介绍 连接概述 1.当您启动SecureCRT时,您将看到“快速连接”对话框与主SecureCRT窗口一起出现. 2.有几种接口可用于连接远程机器:快速连接对话框,工具栏上的连接栏,会 ...
- 前端select动态加载
<select id ="ycode" cssclass="form-control selectpicker" name="ydljgId&q ...
- L257 论述型作文模板
一引出相同观点: 1.With the development of science and technology, more and more people believe that...随着科技的 ...
- python scrapy爬虫存储数据库方法带去重步骤
import pymongo import requests import random import time import pymysql db = pymongo.MongoClient()[' ...
- JAVA项目中的常用的异常处理
1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象 ...
- 在dosbox窗口显示a~z
assume cs:code stack segment db 128 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mo ...