1

我正在设计一个rest api,用户可以使用我将定义的搜索查询语言在其中传递查询。
该语言将允许许多运算符 eq、ne、gt、lt(等于、不等于、大于、小于)等。

该语言将允许分组和逻辑运算符 AND 和 OR。

例如,关于公司的查询可能如下所示

/api/companies?q=(CompanyName eq Microsoft 或 CompanyName eq Apple) And State eq California

所以这应该给我所有公司名称等于“微软”或“苹果”并且州是加利福尼亚的公司。

所以这一切都很好,除了我正在编写 api 的系统非常灵活并且允许将几乎任何字符插入到字段值中。此外,我还必须支持自定义字段,并且可以在字段名称中包含特殊字符。

最初我主要关心的是包含括号的字段。我将将此查询转换为 SQL 服务器查询,并且我需要一种方法来确保不会将字段值中的括号与用于分组的括号混淆。我的第二个想法是强制引用字段值,但我认为这也会导致类似的问题。

我还在考虑可能有一种涉及 html 编码的简单方法,但我无法确切了解它是如何工作的。

我正在寻找的是任何合理方法的建议或示例来处理具有如此灵活数据的休息搜索查询。

4

2 回答 2

0

这是一个例子。 http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/

于 2012-10-10T22:34:51.217 回答
0

您应该使用百分比编码来转义查询字符串中的字符,请参阅RFC 3986。之前的 StackOverflow 帖子包含一些有关 URI 编码的有用背景信息。

最初我主要关心的是包含括号的字段。我将将此查询转换为 SQL 服务器查询,并且我需要一种方法来确保不会将字段值中的括号与用于分组的括号混淆

如果这可能是一个问题,那么听起来您的应用程序将容易受到 SQL 注入的影响。在构建 SQL 查询之前,您应该转义任何外部数据。

/api/companies?q=(CompanyName eq Microsoft 或 CompanyName eq Apple) And State eq California

基于此示例,您可以利用 URI 查询字符串来更好地表示您的查询:

/api/companies?CompanyName=Microsoft%20OR%20Apple&State=California
于 2012-10-10T21:04:39.727 回答