1

定義する検索クエリ言語を使用してユーザーがクエリを渡すことができるRESTAPIを設計しています。
この言語では、eq、ne、gt、lt(等しい、等しくない、より大きい、より小さい)などの多数の演算子を使用できます。

この言語では、グループ化と論理演算子ANDおよびORを使用できます。

たとえば、企業に関するクエリは次のようになります。

/ api / Companies?q =(CompanyNameeqMicrosoftまたはCompanyNameeqApple)およびState eq California

したがって、これにより、会社名が「Microsoft」または「Apple」に等しく、州がカリフォルニアであるすべての会社がわかります。

したがって、APIを作成しているシステムが非常に柔軟であり、ほとんどすべての文字をフィールド値に挿入できるという事実を除いて、これはすべて正常に機能します。さらに、カスタムフィールドもサポートする必要があり、フィールド名に特殊文字を含めることができます。

当初、私の主な関心事は括弧を含むフィールドでした。このクエリをSQLServerクエリに変換します。フィールド値の括弧と、グループ化を目的とした括弧を混同しないようにする方法が必要です。私の2番目の考えは、フィールド値を強制的に引用することでしたが、これも同様の問題を引き起こすと思います。

また、HTMLエンコーディングを含む単純なアプローチがあるかもしれないと考えていましたが、それがどのように機能するかを正確に理解することはできません。

私が探しているのは、そのような柔軟なデータを使用してREST検索クエリを処理するためのアドバイスや合理的なアプローチの例です。

4

2 に答える 2

0

クエリ文字列の文字をエスケープするには、パーセントエンコードを使用する必要があります。RFC3986を参照してください。この以前のStackOverflowの投稿には、URIエンコードに関するいくつかの有用な背景情報が含まれています。

当初、私の主な関心事は括弧を含むフィールドでした。このクエリをSQLサーバークエリに変換します。フィールド値の括弧とグループ化を目的とした括弧を混同しないようにする方法が必要です。

これが問題になる可能性がある場合は、アプリケーションがSQLインジェクションの影響を受けやすいようです。SQLクエリを作成する前に、外部データをエスケープする必要があります。

/ api / Companies?q =(CompanyNameeqMicrosoftまたはCompanyNameeqApple)およびState eq California

この例に基づいて、URIクエリ文字列を利用してクエリをより適切に表すことができます。

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

これが例です。 http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/

于 2012-10-10T22:34:51.217 に答える