怎么编写支持灵活过滤的列表接口,解析前端过滤表达式?-灵析社区

喵酱魔法师

一个列表接口需要支持灵活且复杂的过滤条件一般都是怎么实现的? 我目前的想法是,前端通过过滤组件,生成一个过滤表达式,如查询价格小于100,且列别为tools或者 toolbox 的项目,则表达式为 `price <= 100 and category in ['tool', 'toolkit']`。 我目前使用go开发后端接口,我找到一个表达式库 [https://github.com/antonmedv/expr](https://link.segmentfault.com/?enc=yEj4FKQ2QgGDDCYSmbB9gA%3D%3D.NRTmVFVNYTxdLzVOdKJwjlol8oGeA62%2FS9G1aYeDR5u5LOIybJWySyPMMcBzcqSr),但是不知道该怎么将表达式转为SQL查询,数据库查询我使用的是 GORM。 这个库可以直接计算表达式的结果,但是这和我的需求不符合,我需要将表达式转为通过GORM的SQL查询,然后我尝试了通过这个库的ast 和 sqlbuilder 手动解析并转换成 SQL 查询,但是没有成功,有些复杂一点或者嵌套条件,我不知道怎么解析语法树。 有人有类似的需求么,请问都是怎么实现的? 类似的功能我在 jira 的查询中也见过,但是不知道他们是怎么实现的。 谢谢! * * * 更新:我找到Jira的文档了,我就是想要这种效果,客户端可以通过一个Query表达式来查询,这个表达式可以通过搜索空间生成,也可以让用户自己编写,之所以要使用这种方式,而不是直接让用户写SQL,一是为了安全, 而是要和后端数据库解偶。 [https://support.atlassian.com/jira-service-management-cloud/d...](https://link.segmentfault.com/?enc=gxcYQgTtwE5kryNcwJsW%2Bg%3D%3D.Hh0KePqodFt%2FaDo4ZtjIJy89NDVkWMhDcalsDZWgJK87Nigiis%2BNtFEmwnejAJQYeYXo%2FQfcoFNUdWYJi3ZjpimDoiSQ9%2F%2BVa2JItumY5umXrFNL6C90g%2BjH35izdQfrj7kKkC16Dt8%2FEzlSQuJE6AATEH56%2FIyE2Z0hpidJoCw%3D) 目前的难点是,我不知道怎么解析这种表达式,[https://github.com/antonmedv/expr](https://link.segmentfault.com/?enc=aD8sk5XswvAjcTS7d%2BT5Yw%3D%3D.azoSJ1MSoBnU3%2FQODmDpDfm673YjbAFg6W7wiYE93T4LUe1wmSkZoT%2BD1%2BrjReGH) 基本上可以满足需求,但是需要自己解析AST到SQL,另外就是无法扩展语法, 如果大家实现过有类似的需求,可以给我参考参考哈,谢谢

阅读量:11

点赞量:0

问AI
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241122/a03029f5e230f53e2afe32751a28e302.png)