过滤规范
POB API 对过滤和排序都做了规范约束,让我们来了解下规范是如何定义的吧。
POB SDK 使用一种称为 NQL 的查询语言来允许过滤 API 结果。您可以使用匹配、大于/小于或否定,以及与和/或结合来过滤任何字段或包含的字段。NQL 还不支持“like”或部分匹配。
在最简单的情况下,过滤的工作原理与 GMail、GitHub 或 Slack 相同——你提供一个字段和一个值,用冒号分隔。
如何指定过滤字段
当前仅支持 GET 请求,我们在查询参数中指定过滤字段,比如:
GET /api/v1/workflow?filter=namespace:'MetaJam',namespace:'xxx'
没错,细心的您会发现,我们通过 filter 来指定过滤条件。过滤字段可以是多个,我们用 , 表示或。更多的可以了解过滤字段的语法。
语法参考
过滤表达式
过滤器表达式是一个字符串,它提供了属性、操作符和值,形式如下: 属性:操作符值:
- 属性 - 表示要筛选的字段的路径
- : - 分隔符在属性和操作符-值表达式之间
- 操作符 (可选) - 如何比较值 (
:可以简单的理解为=) - 值 - 要匹配的值
属性
匹配项: [a-zA-Z_][a-zA-Z0-9_.]
- 只能包含字母数字字符和
_ - 不能包含空格
- 必须以字母开头
- 支持
.分隔路径,例如authors.slug或posts.count - 总是小写,但接受并转换为大写
值
可以是以下其中之一
- null
- true
- false
- 数字 (整数)
- 文字
- 任何符合以下规则的字符串:
- 不能以
-开头,但可以包含它 - 不能包含这些符号:
'"+,()><=[]除非它们被转义 - 不能包含空格
- 字符串
'这里是字符串',这里是字符串表示除单引号或者双引号以外的任意字符- 如果是单引号或者双引号,则必须要转义
- 不能包含空格
- 一个字符串可以包含一个可以被
new Date()解析的任何格式的日期
- 相对日期
- 使用模式:
now-30d - 必须以
now开头 - 可以使用
-或者+ - 可以使用任何整数作为周期的大小
- 支持下面这些周期:
d,w,M,y,h,m,s
- 使用模式:
操作符
-- 否>- 大于>=- 大于等于<- 小于<=- 小于等于~=- 包含~^- 以某某开头~$- 以某某结束[value, value, …]-in操作,用于或查询,表示任意一个在其中即可, 可以以-取反操作,表示不在其中
组合
+- 表示与,- 表示或(过滤表达式)- 用于提升优先级
Strings vs Literals
大多数时候,在 POB API 中构建过滤器时,不需要在字符串周围加上引号。如果您基于 slug 进行过滤,则 slug 始终与文字兼容。但是,在某些情况下,您可能需要使用包含过滤器语法中使用的其他字符之一的字符串,例如日期和时间包含 :,对这些使用单引号。