外观
协议差异
NestQL 的请求是嵌套 JSON:表名作键,条件写在对象里。这种形状与一些 JSON 嵌套查询协议相近。下面是 QueryEngine 自己的约定。产品名是 NestQL。
约定
- 库方法成功时直接返回业务 JSON。HTTP 成功时在同一层加上
code与message(200/success)。字段名是message。失败抛异常;HTTP 失败体只有code和message。没有登录,因此没有 401。未登记的表是 403。 - 没有登录、角色或会话。
registerTable授予全部 method。 - 未登记的表直接拒绝。
- 不设查询深度、对象个数、数组个数、SQL 条数、更新条数的硬上限。
page/count只夹紧。请求不会因为「太深」失败。见 限制。 - 关联是按引用再查的单表 SQL。见 引用赋值。
- 对象查询命中两行及以上会失败。要列表就用
[]或表名[]。 @column只接受列名和列:别名。name$的通配符写在值里。@order使用列、列+、列-。- 功能符只有
@column和@order。 - 数组上的数字
query被忽略。GET 返回当前页,HEAD 返回总行数。 - PUT / DELETE 必须带主键条件。默认主键列是
id。 - 一次请求一个本地 JDBC 事务。
- 引用目标缺失时,读路径得到
null或[],写路径回滚。 - 标识符只允许 ASCII 字母、数字、下划线。表名大小写不敏感,只登记一次。MySQL 物理表名折成小写,达梦折成大写。列名保持请求原文。
- 整型列在响应里是 64 位整数。日期时间转成字符串。
- 达梦默认把物理标识符转成大写。
@column的别名保持请求中的大小写。 - 执行顺序按引用拓扑排序。响应键顺序与请求一致。
- 批量写入使用
表名[]: [ {...}, {...} ]。POST 也接受查询形态的表名[]: { ... },语义是插入一棵表(以前会拒绝,这是不兼容变更)。PUT / DELETE 仍拒绝查询形态。GET / HEAD 不接受表名[]: [ {...} ]。
未实现
本版不提供这些能力,调用方不要依赖它们存在:
- 多表 JOIN
@raw、@group、@having- 正则条件、远程函数、存储过程、脚本条件
- 多数据源事务
- 把列名在驼峰与下划线之间自动转换的
format
完整条件表在 运算符。