sql2json

使用 go 开发的本地 WEB 服务器,允许将 sql 语句执行结果转换为 json 输出。 可以用于 PostMan 等测试软件测试接口时的数据校验,要求测试人员会编写相应的 SQL 语句。 支持 windows、Linux、Mac 等主流操作系统。

以下以 Mac 版本的命令行版本进行说明,实际使用的时候请根据操作系统使用合适的可执行文件。 下载地址: https://yujinping.top/files/sql2json.zip

输出规范

WEB 输出 JSON 格式数据,SQL 执行结果为返回 JSON 数组

{
  "code": 200,
  "message": "",
  "data": []
}

参数说明

直接执行可执行文件,将打印可用参数及默认值

./bin/sql2json_mac

Usage of ./bin/sql2json_mac:
      --https-cert-file="": https协议支持cert证书文件
      --https-key-file="": https协议支持key文件
      --log-level="info": 日志级别,支持:debug,info,error
      --mysql-db="test": mysql数据库名称
      --mysql-host="localhost": mysql主机
      --mysql-pass="": mysql连接的密码
      --mysql-port=3306: mysql端口号
      --mysql-user="root": mysql连接的用户
      --port=8080: 启动的WEB服务端口号
      --start=false: 启动WEB服务器

可以传递相应的参数进行配置,使用--start参数启动服务 当需要支持 https 协议的时候,需要指定 key 和 cert 文件

启动服务

如下命令将使用默认参数配置启动一个支持 http 协议的 WEB 服务器:

./bin/sql2json_mac --start

此时将启动一个默认 8080 端口,访问 localhost:3306/test 的数据库的 WEB 服务。 若数据库配置不是默认值,请使用指定的参数变更。

SQL 请求

WEB 服务默认提供POST {{host}}/sql/select服务接收 SQL 查询语句,此时 host=http://localhost:8080,即:

POST http://localhost:8080/sql/select

需要 POST 如下格式的 JSON body:

{
  "sql": "SELECT * FROM test"
}

假设你的 test 数据库中有个 test 表:

CREATE TABLE `test` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

当如上的 POST 请求完成时,将返回如下格式的 JSON 数据:

{
  "code": 200,
  "message": "",
  "data": [
    {
      "id": 1,
      "name": "test-中文测试",
      "create_time": "2020-03-15 01:02:03"
    },
    {
      "id": 2,
      "name": "admin",
      "create_time": "2020-03-16 11:22:33"
    }
  ]
}

PostMan 测试接口动态变量

当使用 PostMan 测试时,可以在 body 的 json 中插入 PostMan 的变量。 例如有 PostMan 变量 id=1,则:

{
  "sql": "SELECT * FROM test WHERE id={{id}}"
}

最后服务器端将执行:

SELECT * FROM test WHERE id=1

并返回 JSON:

{
  "code": 200,
  "message": "",
  "data": [
    {
      "id": 1,
      "name": "test-中文测试",
      "create_time": "2020-03-15 01:02:03"
    }
  ]
}