我正在设计一个rest api,用户可以使用我将定义的搜索查询语言在其中传递查询。
该语言将允许许多运算符 eq、ne、gt、lt(等于、不等于、大于、小于)等。
该语言将允许分组和逻辑运算符 AND 和 OR。
例如,关于公司的查询可能如下所示
/api/companies?q=(CompanyName eq Microsoft 或 CompanyName eq Apple) And State eq California
所以这应该给我所有公司名称等于“微软”或“苹果”并且州是加利福尼亚的公司。
所以这一切都很好,除了我正在编写 api 的系统非常灵活并且允许将几乎任何字符插入到字段值中。此外,我还必须支持自定义字段,并且可以在字段名称中包含特殊字符。
最初我主要关心的是包含括号的字段。我将将此查询转换为 SQL 服务器查询,并且我需要一种方法来确保不会将字段值中的括号与用于分组的括号混淆。我的第二个想法是强制引用字段值,但我认为这也会导致类似的问题。
我还在考虑可能有一种涉及 html 编码的简单方法,但我无法确切了解它是如何工作的。
我正在寻找的是任何合理方法的建议或示例来处理具有如此灵活数据的休息搜索查询。