sqler sql 转rest api 数据校验的处理】的更多相关文章

早期版本(2.0 之前)使用rules 进行数据校验处理,2.0 之后进行了修改使用 validators,这样更加明确 参考格式   addpost {    // if any rule returns false,    // SQLer will return 422 code, with invalid rules.    //    // $input is a global variable holds all request inputs,    // including the…
sqler 2.0 提供了一个新的指令aggregate,注意这个和sql 的聚合函数不是一个概念,这个只是为了 方便api数据的拼接 参考格式   databases {    exec = "SHOW DATABASES" ​    transformer = <<JS        // there is a global variable called `$result`,        // `$result` holds the result of the sq…
sqler sql 转rest api 的源码还是比较简单的,没有比较复杂的设计,大部分都是基于开源 模块实现的. 说明: 当前的版本为2.0,代码使用go mod 进行包管理,如果本地运行注意golang 版本,我使用docker 运行, 参考 https://github.com/rongfengliang/sqler-docker-compose/blob/master/Dockerfile 依赖的开源包 配置解析的(比如bind,exec,validates,include...) 使用…
sqler 从开源很快就获取了1k的star,使用起来很方便,而且也很灵活,支持的数据库也比较多. 支持的功能 无需依赖,可独立使用: 支持多种数据可类型,包括:SQL Server, MYSQL, SQLITE, PostgreSQL, Cockroachdb 等: 内置 RESTful 服务器: 内置 RESP Redis 协议,可以使用任何 redis 客户端连接到 SQLer: 内置 Javascript 解释器,可轻松转换结果: 内置验证器: 自动使用预备语句: 使用(HCL)配置语言…
macro 说明 macro 是sqler 的核心,当前的处理流程为授权处理,数据校验,依赖执行(include),聚合处理,数据转换 处理,sql 执行以及sql 参数绑定 授权处理 这个是通过golang 的js 包处理的,通过将golang 的http 请求暴露为js 的fetch 方法,放在js 引擎执行,通过 http 状态吗确认是否是执行的权限,对于授权的处理,由宏的配置指定,建议通过http hreader处理 参考格式:      authorizer = <<JS      …
sqler 内嵌了一个js 引擎的实现(基于goja,当我们配置了exec的配置之后 调用宏(redis 接口)或者rest api 的时候会有一个全局变量$result ,保存了执行的结果,我们可以 通过js 操作数据对象,比如进行数据改写,进行一些额外的数据控制. 同时默认的demo 配置的databases 宏就包含了js 调用的demo 环境准备 docker-compose 运行 docker-compose 文件   version: "3" services:  sqle…
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 添加 bi…
sqler 支持redis 协议,我们可以用过redis client 连接sqler,他会将宏住转换为redis command 实现上看源码我们发现是基于一个开源的redis 协议的golang 实现,同时sqler 内置了一些方便 的command : list. info. echo.select.ping. 目前关于redis 的使用文档基本没有,但是我们通过阅读源码可以看出,就是解析参数,第一个为 command, 第二个为数据(json 序列化之后的,下边会有使用的说明 环境准备…
rest 服务说明 rest 协议主要是将配置文件中的宏暴露为rest 接口,使用了labstack/echo web 框架,同时基于context 模型 进行宏管理对象的共享,同时进行了一些中间件的注册 cors RemoveTrailingSlash gzip Recover rest 启动 中间件注册    e.Pre(middleware.RemoveTrailingSlash())  e.Use(middleware.CORS())  e.Use(middleware.GzipWith…
resp 协议主要是方便使用redis 客户端进行连接,resp 主要是依赖 tidwall/redcon golang redis 协议包 resp 服务说明 server_resp.go 文件,干的事情比较简单,就是redis command 的支持,包含了几个内置的 ping select help quit echo, 以及宏相关的list 以及宏调用的command 代码 server_resp.go 注册redis 协议服务   func initRESPServer() error…