[英]API Filtering in Rest
我有一个要求,用户希望通过 REST API(GET 调用)过滤表(API 过滤应该允许使用括号来定义操作优先级并使用可用字段的任何组合。支持的操作应该包括或,和,等式(等于), ne (不等于), gt (大于), lt (小于), in, like)
用例示例:
考虑具有列 user_id,first_name,last_name,food_intake_calories,created_at 的表
查询应支持 (created_at eq '2016-05-01') AND ((food_intake_calories gt 20) OR (food_intake_calories lt 10))。
我首先想到将输入替换为“=”,将 ne 替换为“.=”,然后直接将 append 这个到 sql 的 where 子句并运行查询,但这将再次邀请 Z9778840A0100CB30C982876741B0B5A2 注入。 我不知道如何处理这个问题。 我正在使用 java 和 dropwizard 作为后端服务器。
我的建议是使用Jexl表达式解析器来形式化这个解析。
可以替换一些大括号并使用自定义代码来处理请求,但需求会慢慢发生变化,您会得到一个复杂的代码来解析 REST 请求。
OData 将是 go 的正确方法。 它具有为用户用例设计的规范。 使用这种标准的数据表示方式的好处是,只要遵循标准的 OData 查询,每个人都可以使用您的 API。
希望这可以帮助 !!
只要您先检查它,我认为将完整表达式解析到 sql 的责任传递给它不一定有问题。 你可以 devise 一组规则:
column operator 'value'
的形式value
替换为 db 参数占位符并将给定的数据值放入该参数的值中 - 将这些值放入 hash map 键集以对它们进行重复数据删除,然后将它们替换为原始 Z8A5DA52ED1201A 参数,添加它们 247D359E7A 参数到你的 db 命令,就像你 go
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.