zl程序教程

您现在的位置是:首页 >  其他

当前栏目

通用查询语言(GQL)

2023-03-31 11:04:17 时间

使用本框架生成的接口默认支持通用查询语言,通用查询语言致力于统一不同模型,不同筛选条件,动态筛选,复合条件筛选的查询方式,无需改代码支持不同场景下的查询需求。

以下是一些通用查询语言示例:

  • 查询所有姓王的用户:
    GET /api/users?filters=name%5E%3D%E7%8E%8B
    其中filters的值是name^=王的urlencode编码

以下为了方便理解,只展示filters编码前的内容

  • 查询所有不姓王的用户:
    name^!=王

  • 查询所有姓王且年龄大于20岁的用户:
    name^=王&age>20

  • 查询所有王姓和李姓且年龄大于30岁的用户:
    (name^=王|name^=李)&age>30

  • 查询年龄正好是12,24,36岁的用户:
    age IN[12,24,36]

  • 查询20岁以上的用户,按年龄倒序排列:
    GET /api/users?sort=-age&filters=age>20

  • 查询20岁以上的用户,按年龄倒序排列, 每页5条,取第三页数据:
    GET /api/users?sort=-age&skip=20&take=5&filters=age>20

  • 查询20岁以上的用户,按年龄倒序排列, 每页5条,取第三页数据, 仅返回姓名和年龄两列数据:
    GET /api/users?sort=-age&skip=20&take=5&fields=name,age&filters=age>20

以下是GQL的详细说明

排序
sort: [[+-]FieldName,]
排序示例:
sort=+name,-date

分页

  • skip:跳过多少条记录
  • take:返回多少条记录

字段过滤

  • fields:逗号分隔的字段名列表,如果指定了该参数,则只返回指定的字段,用来加速网络传输。

字段过滤示例:
fields=name,age,date

筛选
筛选由逻辑运算和基础筛选单元构成,逻辑运算包括与,或,括号,基础筛选单元由字段名,比较符,值组成,若值中包含特殊字符,则需要urlencode。

筛选示例(未编码):
filters=name^=王&age>20&job IN[aaa,bbb,ccc]

以下是所有的比较符:
=, *=, ^=, $=, !=, *!=, ^!=, $!=, >, <, >=, <=, IS NULL, IS NOT NULL, IN[]

  • 各类型支持的比较符

    • 字符型(等于,包含,开始于,结束于,不等于,不包含,不开始于,不结束于,为空,不为空, IN Array[])
    • 数值型(等于,大于,小于,大于等于,小于等于,不等于,为空,不为空, IN Array[])
    • 日期型(等于,大于,小于,大于等于,小于等于,不等于,为空,不为空, IN Array[])
    • 布尔型(等于,不等于,为空,不为空, IN Array[])
    • 子表关联出的列表(包含,不包含)
  • 逻辑运算

    • 与:&
    • 或:|
    • 括号:()

逻辑运算支持嵌套, 与优先于或,所以连续用或必须用括号包起来

后续将介绍具体实现