HTTP连接扩展
简单讲一下HTTP连接扩展。
上一篇说到,JDBC连接其实是通过HTTP协议连通JAVA和EZDML的,这里其实对EZDML来说JDBC就是一个HTTP服务。
但HTTP服务并不只限于JDBC,只要符合请求规范,任何HTTP服务都可以。如有必要,你可以用你熟悉的语言来开发HTTP服务,java springboot、php、python、C/C++、c# ASP.NET、NodeJS、Go、Ruby、VB…只要实现几个json请求就可以。
EZDML支持http或https连接,且HTTP服务并不需要部署在本机,你可以部署在服务器上,这样其他EZDML用户不需要安装任何驱动就可以访问了(当然安全性问题要自行保证)。
上面说的是“如有必要”可以用你熟悉的语言来开发HTTP/HTTPS服务,其实一般都没必要开发,但了解一下或改一下已有代码是可以的。
下面我们把请求的规范简单捋一下。
接口分析
因为jdbc服务会输出日志,因此我们可以从分析日志出发。启动JDBC服务,我们再次登录JDBC,并输入用户名aaa,密码bbb:
点击确定,这时我们会看到输出日志中有登录请求:
把登录请求在浏览器上执行:
得到登录接口响应内容:
1 | { |
显然,最后那个token是登录凭据,后面请求需要用到的;其它是一些信息。
依此类型,我们能得到其它接口的内容。
所有请求都是一个HTTP的GET命令,一般包含cmd、param1、param2、data等参数(中文要采用UTF8进行UrlEncode编码),返回结果均为json格式,其中resultCode为0表示请求成功;resultCode为-1则失败,同时errorMsg为错误信息。
另外,从java源码,我们也能看出有哪些接口:
好了,下面下各个接口简单过一下。
登录:connect
以默认HTTP服务地址http://localhost:8083/ezdml/为例,登录请求URL如下:
1 | http://localhost:8083/ezdml/?cmd=connect¶m1=userName¶m2=password |
参数如下:
- cmd——命令类型,指定为connect,表示执行登录
- param1——用户名(JDBC这里没有用,可随意填)
- param2——密码,如果HTTP配置中有校验密码,需要提供,否则随意
返回结果如下:
1 | { |
其中:
- EngineType告诉EZDML最终连上的数据库类型
- DbSchema为模式名@登录用户名
- token是登录凭据,后面请求需要用到的(不校验密码时可以不用)
- NeedGenCustomSql是告诉EZDML,在生成数据库SQL时是否要征询HTTP服务的意见,默认为false(参见后面的《生成自定义SQL》一节)
注销:disconnect
注销请求URL示例如下:
1 | http://localhost:8083/ezdml/?cmd=disconnect&eztoken=a916e209c3a541b6baf46b4ec5890a61 |
参数如下:
- cmd——命令类型,指定为disconnect,表示注销登录
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
结果如下:
1 | { |
resultCode为0表示执行成功。
获取用户列表:GetDbUsers
请求URL示例如下:
1 | http://localhost:8083/ezdml/?cmd=GetDbUsers&eztoken=a916e209c3a541b6baf46b4ec5890a61 |
参数如下:
- cmd——命令类型,指定为GetDbUsers,表示获取数据库用户列表
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
结果如下:
1 | { |
其中
- resultCode为0表示执行成功
- itemList列出所有的数据库用户(模式)
获取对象列表:GetDbObjs
请求URL示例:
1 | http://localhost:8083/ezdml/?cmd=GetDbObjs&eztoken=9889b063d91d4cbfaf3aa96cd166d8f5¶m1=dtest |
参数如下:
- cmd——命令类型,指定为GetDbObjs,表示获取数据库对象列表
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
- param1——数据库用户(模式)名,用于过滤指定用户下的对象(此参数可选)
结果如下:
1 | { |
其中
- resultCode为0表示执行成功
- itemList列出所有的数据库表对象
获取对象详情:GetObjInfos
请求URL示例:
1 | http://localhost:8083/ezdml/?cmd=GetObjInfos&eztoken=9889b063d91d4cbfaf3aa96cd166d8f5¶m1=dtest¶m2=favorite |
参数如下:
- cmd——命令类型,指定为GetObjInfos,表示获取数据库对象详情(主要是表名、注释和字段信息了)
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
- param1——数据库用户(模式)名(此参数可选)
- param2——数据库表名或对象名
结果如下:
1 | { |
其中
- resultCode为0表示执行成功
- Name为表名
- Memo为注释
- MetaFields列出所有的字段
- 整个JSON与EZDML的CtMetaTable对象的JsonStr是一致的
判断对象是否存在:ObjectExists
请求URL示例:
1 | http://localhost:8083/ezdml/?cmd=ObjectExists&eztoken=9889b063d91d4cbfaf3aa96cd166d8f5¶m1=dtest¶m2=favorite |
参数如下:
- cmd——命令类型,指定为ObjectExists,表示判断数据库对象是否存在
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
- param1——数据库用户(模式)名(此参数可选)
- param2——数据库表名或对象名
结果如下:
1 | { |
其中
- resultCode为0表示执行成功
- RESULT为true表示数据库对象存在,为false表示不存在
执行SQL命令:ExecSql
请求URL示例:
1 | http://localhost:8083/ezdml/?cmd=ExecSql&eztoken=0c75adc42cda40fc9eb26200aad5efdc¶m1=alter table area |
参数如下:
- cmd——命令类型,指定为ExecSql,表示要执行SQL
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
- param1——SQL内容(较长的话可以用POST方式请求,注意可能需要编码,这里演示用了简单的SQL就没编码)
执行成功结果如下:
1 | { |
其中
- resultCode为0表示执行成功
- RESULT为OK表示SQL执行成功
执行失败则返回错误:
1 | { |
打开表数据:OpenTable
比如要打开这个表SQL:
请求URL示例:
1 | http://localhost:8083/ezdml/?cmd=OpenTable&eztoken=ac9041c6b07c480f93ce9d14cf04deff¶m1=select * from table11 t where 1=1 order by Id limit 25 |
参数如下:
- cmd——命令类型,指定为OpenTable,表示要通过执行SQL打开数据集
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
- param1——SQL内容(较长的话可以用POST方式请求,注意可能需要编码,这里演示用了简单的SQL就没编码)
执行成功结果如下:
1 | { |
其中
- resultCode为0表示执行成功
- Cols为表格列信息
- Rows为表格数据行信息
生成自定义SQL:GenCustomSql
这个稍复杂点,了解下就好。
此功能默认不开启,需要修改java代码在连接Connect时返回NeedGenCustomSql参数值为true才启用。
当EZDML登录检测到NeedGenCustomSql为true后,每当EZDML要生成数据库SQL时,会调用GenCustomSql接口,把默认生成的SQL和相关信息传过来,HTTP服务可对SQL结果进行加工处理再返回给EZDML,从而实现自定义SQL生成的功能。
请求参数说明:
- cmd——命令类型,指定为GenCustomSql
- eztoken——用户登录凭据(如果没有要求密码校验,可不填)
- param1——EZDML设计中的表的JSON内容
- param2——数据库中实际表的JSON内容
- data——参数MAP对象,包含以下内容:
- GenCreateTableSql——是否生成DDL SQL(如create table)
- GenCreateConstrainsSql——是否生成外键约束
- EngineType——生成的数据库类型
- DefaultResult——EZDML默认生成的结果
- Options——其它设置,如包含[GEN_SELECT_SQL]则表示要生成示例SELECT语句
执行成功结果如下:
1 | { |
其中
- resultCode为0表示执行成功
- RESULT为生成的结果SQL
以上就是HTTP服务需要实现的全部接口。
ORACLE
SQL Server
MySQL
PostgreSQL
参见《EZDML连接数据库——PostgreSQL和人大金仓》
SQLite
ODBC
参见《EZDML连接数据库——ODBC》
JDBC
参见《EZDML连接数据库——JDBC》