Rest Search Query处理特殊字符设计标准

时间:2012-10-10 20:30:56

标签: rest special-characters

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

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

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

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

所以这应该给我所有公司名称等于'微软'或'Apple'且州是加州的公司。

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

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

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

我正在寻找的是使用这种灵活数据处理休息搜索查询的合理方法的任何建议或示例。

2 个答案:

答案 0 :(得分:0)

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

  

最初我主要担心的是包含括号的字段。我会转换这个   查询到SQL服务器查询,我需要一种方法来确保我不会混淆括号   在一个字段值中,其中一个用于分组

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

  

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

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

/api/companies?CompanyName=Microsoft%20OR%20Apple&State=California

答案 1 :(得分:0)