2012-10-10 45 views
1

我正在設計一個休息api,用戶可以使用我將定義的搜索查詢語言傳遞查詢。
該語言將允許多個運算符eq,ne,gt,lt(等於,不等於,大於,小於等)等。其他搜索查詢處理特殊字符設計標準

該語言將允許分組和邏輯運算符AND和OR。

因此,例如,關於公司的查詢可能看起來像下面

/API /公司?Q =(公司名稱EQ微軟或公司名稱EQ蘋果)和國家EQ加州

因此,這應該給我的一切公司名稱等於「微軟」或「蘋果」,州是加利福尼亞州的公司。

所以這一切都很好,除了我正在寫api的系統非常靈活並且幾乎允許任何字符插入到字段值中。此外,我還必須支持自定義字段,並且可以在字段名稱中包含特殊字符。

最初我主要擔心的是包含括號的字段。我將把這個查詢轉換成SQL服務器查詢,並且我需要一種方法來確保我不會將字段值中的括號與用於分組的字段混淆。我的第二個想法是強制引用字段值,但我認爲這也會導致類似的問題。

我也在考慮可能有一個涉及html編碼的簡單方法,但我無法確切地看到它是如何工作的。

我在尋找的是任何建議或合理的方法來處理與這種靈活的數據休息搜索查詢的例子。

回答

0

您應該使用百分號編碼來轉義查詢字符串中的字符,請參閱RFC 3986。這previous StackOverflow post包含一些有關URI編碼的有用的背景信息。

最初我主要擔心的是包含括號的字段。我將這個 查詢轉換成SQL Server查詢,我需要一種方法來確保我不會與一個字段值是用於分組

如果這可能是一個問題混淆括號 那麼它聽起來像你的應用程序將容易受到SQL注入。在構建SQL查詢之前,您應該轉義任何外部數據。

/API /公司?Q =(公司名稱EQ微軟或公司名稱EQ蘋果)和國家EQ加州

基於這個例子中,你可以採取URI查詢字符串的優勢,更好地代表查詢:

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