Skip to content

协议差异 ​

NestQL 的请求是嵌套 JSON:表名作键,条件写在对象里。这种形状与一些 JSON 嵌套查询协议相近。下面是 QueryEngine 自己的约定。产品名是 NestQL。

约定 ​

  1. 库方法成功时直接返回业务 JSON。HTTP 成功时在同一层加上 code 与 message(200 / success)。字段名是 message。失败抛异常;HTTP 失败体只有 code 和 message。没有登录,因此没有 401。未登记的表是 403。
  2. 没有登录、角色或会话。registerTable 授予全部 method。
  3. 未登记的表直接拒绝。
  4. 不设查询深度、对象个数、数组个数、SQL 条数、更新条数的硬上限。page / count 只夹紧。请求不会因为「太深」失败。见 限制。
  5. 关联是按引用再查的单表 SQL。见 引用赋值。
  6. 对象查询命中两行及以上会失败。要列表就用 [] 或 表名[]。
  7. @column 只接受列名和 列:别名。
  8. name$ 的通配符写在值里。
  9. @order 使用 列、列+、列-。
  10. 功能符只有 @column 和 @order。
  11. 数组上的数字 query 被忽略。GET 返回当前页,HEAD 返回总行数。
  12. PUT / DELETE 必须带主键条件。默认主键列是 id。
  13. 一次请求一个本地 JDBC 事务。
  14. 引用目标缺失时,读路径得到 null 或 [],写路径回滚。
  15. 标识符只允许 ASCII 字母、数字、下划线。表名大小写不敏感,只登记一次。MySQL 物理表名折成小写,达梦折成大写。列名保持请求原文。
  16. 整型列在响应里是 64 位整数。日期时间转成字符串。
  17. 达梦默认把物理标识符转成大写。@column 的别名保持请求中的大小写。
  18. 执行顺序按引用拓扑排序。响应键顺序与请求一致。
  19. 批量写入使用 表名[]: [ {...}, {...} ]。POST 也接受查询形态的 表名[]: { ... },语义是插入一棵表(以前会拒绝,这是不兼容变更)。PUT / DELETE 仍拒绝查询形态。GET / HEAD 不接受 表名[]: [ {...} ]。

未实现 ​

本版不提供这些能力,调用方不要依赖它们存在:

  • 多表 JOIN
  • @raw、@group、@having
  • 正则条件、远程函数、存储过程、脚本条件
  • 多数据源事务
  • 把列名在驼峰与下划线之间自动转换的 format

完整条件表在 运算符。