博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLer:无需编程语言即可将SQL查询转换为RESTful API的工具
阅读量:6262 次
发布时间:2019-06-22

本文共 4183 字,大约阅读时间需要 13 分钟。

SQLer是一个微型http服务器,用Go语言编写,将旧的CGI概念应用于SQL查询。SQLer允许编写端点并分配一个SQL查询,以便任何人点击它时能执行查询。此外SQLer还允许自定义验证规则,可验证请求正文或查询参数。SQLer使用nginx样式配置语言(HCL)。

SQLer功能

  • 无需依赖,可独立使用;
  • 支持多种数据可类型,包括:SQL Server, MYSQL, SQLITE, PostgreSQL, Cockroachdb等;
  • 内置RESTful服务器;
  • 内置RESP Redis协议,可以使用任何redis客户端连接到SQLer;
  • 内置Javascript解释器,可轻松转换结果;
  • 内置验证器;
  • 自动使用预备语句;
  • 使用(HCL)配置语言;
  • 可基于unix glob模式加载多个配置文件;
  • 每条SQL查询可被命名为宏;
  • 在每个宏内可使用 Go text/template
  • 每个宏都有自己的Context(查询参数+正文参数)作为.Input(map [string] interface{}),而.Utils是辅助函数列表,目前它只包含SQLEscape;
  • 可自定义授权程序,授权程序只是一个简单的webhook,sqler使用这个webhook验证是否应该完成某请求。

下载

  • 源代码:
  • 二进制版本:

配置概况

// create a macro/endpoint called \u0026quot;_boot\u0026quot;,// this macro is private \u0026quot;used within other macros\u0026quot; // because it starts with \u0026quot;_\u0026quot;.// this rule only used within `RESTful` context._boot {    // the query we want to execute    exec = \u0026lt;\u0026lt;SQL        CREATE TABLE IF NOT EXISTS `users` (            `ID` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,            `name` VARCHAR(30) DEFAULT \u0026quot;@anonymous\u0026quot;,            `email` VARCHAR(30) DEFAULT \u0026quot;@anonymous\u0026quot;,            `password` VARCHAR(200) DEFAULT \u0026quot;\u0026quot;,            `time` INT UNSIGNED        );    SQL}// adduser macro/endpoint, just hit `/adduser` with// a `?user_name=\u0026amp;user_email=` or json `POST` request// with the same fields.adduser {    // what request method will this macro be called    // default: [\u0026quot;ANY\u0026quot;]    // this only used within `RESTful` context.    methods = [\u0026quot;POST\u0026quot;]    // authorizers,    // sqler will attempt to send the incoming authorization header    // to the provided endpoint(s) as `Authorization`,    // each endpoint MUST return `200 OK` so sqler can continue, other wise,    // sqler will break the request and return back the client with the error occurred.    // each authorizer has a method and a url.    // this only used within `RESTful` context.    authorizers = [\u0026quot;GET http://web.hook/api/authorize\u0026quot;, \u0026quot;GET http://web.hook/api/allowed?roles=admin,root,super_admin\u0026quot;]    // the validation rules    // you can specify separated rules for each request method!    rules {        user_name = [\u0026quot;required\u0026quot;]        user_email =  [\u0026quot;required\u0026quot;, \u0026quot;email\u0026quot;]        user_password = [\u0026quot;required\u0026quot;, \u0026quot;stringlength: 5,50\u0026quot;]    }    // the query to be executed    exec = \u0026lt;\u0026lt;SQL       {
{ template \u0026quot;_boot\u0026quot; }} /* let's bind a vars to be used within our internal prepared statement */ {
{ .BindVar \u0026quot;name\u0026quot; .Input.user_name }} {
{ .BindVar \u0026quot;email\u0026quot; .Input.user_email }} {
{ .BindVar \u0026quot;emailx\u0026quot; .Input.user_email }} INSERT INTO users(name, email, password, time) VALUES( /* we added it above */ :name, /* we added it above */ :email, /* it will be secured anyway because it is encoded */ '{
{ .Input.user_password | .Hash \u0026quot;bcrypt\u0026quot; }}', /* generate a unix timestamp \u0026quot;seconds\u0026quot; */ {
{ .UnixTime }} ); SELECT * FROM users WHERE id = LAST_INSERT_ID(); SQL}// list all databases, and run a transformer functiondatabases { exec = \u0026quot;SHOW DATABASES\u0026quot; transformer = \u0026lt;\u0026lt;JS // there is a global variable called `$result`, // `$result` holds the result of the sql execution. (function(){ newResult = [] for ( i in $result ) { newResult.push($result[i].Database) } return newResult })() JS}

支持的SQL引擎

  • sqlite3
  • mysql
  • postgresql
  • cockroachdb
  • sqlserver

支持的 Util

  • .Hash \u0026lt;method\u0026gt; - 使用指定的方法[md5,sha1,sha256,sha512,bcrypt]散列指定的输入, {
    { \u0026quot;data\u0026quot; | .Hash \u0026quot;md5\u0026quot; }}
  • ·.UnixTime - 以秒为单位返回unit时间, {
    { .UnixTime }}
  • .UnixNanoTime - 以纳秒为单位返回unix时间,{
    { .UnixNanoTime }}
  • .Uniqid - 返回唯一ID,{
    { .Uniqid }}

协议

SQLer遵循 Apache 2.0协议。

转载地址:http://onkpa.baihongyu.com/

你可能感兴趣的文章
了解你所不知道的SMON功能(十二):Shrink UNDO(rollback) SEGMENT
查看>>
GCC编译器中的扩展
查看>>
[置顶] 礼物:《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)...
查看>>
使用快捷键,快到极致
查看>>
[原]【实例化需求】1.FitNesse工具应用简介
查看>>
java中的import和package机制
查看>>
统计、案例-深入理解Oracle索引(10):索引列字符类型统计信息的32位限制-by小雨...
查看>>
ubuntu常用命令精选
查看>>
UML类图
查看>>
企业上市上市央企大面积亏损折射出啥弊端?
查看>>
DXP_protel2004_原理图设计基础_集成运放原理图设计学习
查看>>
powershell--uninstall webapplication
查看>>
ubuntu配置vsftpd记录
查看>>
日期控件Android 自定义日历控件
查看>>
Java多线程编程:变量共享分析(Thread)
查看>>
word如何自动生成目录
查看>>
疯狂暑期学习计划~~~
查看>>
Mysql查询大表出现的一个错误
查看>>
Scala 中的foreach和map方法比较
查看>>
使用OWIN作为WebAPI的宿主
查看>>