3

ROA(Resource Oriented Architecture)を使用して、アプリケーションへのRESTインターフェースを構築しています。

クライアントがURLで検索パラメータを指定できるようにしたいと思います。したがって、クライアントは「次のようなすべての人を私にくれ」と言うことができます。

  • 「first_name」は「BOB」と同じです
  • 「年齢」が「30」より大きい
  • 「last_name」で並べ替え

私は次のようなことを考えていました:

GET /PEOPLE/{query_parameters}/{sort_parameters}

...多分

GET /PEOPLE?query=<query_string>&sort=<sort_string>

...しかし、COLUMN_NAME-OPERATOR-VALUEで3回指定するのにどの構文が適しているかわかりません。私はおそらく次のようなことを考えていました:

column_name.operator.value

したがって、クライアントは次のように言うことができます。

GET /PEOPLE?query=first_name.EQUALS.bob&query=age.GREATER_THAN.30&sort=last_name.ASCENDING

私は本当にここで車輪の再発明をしたくありません、これが行われるいくつかの受け入れられた方法はありますか?私はRestletsを使用していますが、それが違いを生むかどうかはわかりません。

4

4 に答える 4

2

検索パラメーターを単一のパラメーターとして追加します。専用のサブクエリ言語は、多くの場合、処理+読み取りがより困難です(特に、URLエンコードする必要があるため)。だから私は完全な機能を吹き飛ばしたSQL構文のものを押しつぶさないだろう。本当に必要なパラメータを追加するだけで、検索に意味があります。複雑さが少ないほど、処理が簡単になります:)

同じパラメータに追加する最小/最大のもの。 /people?age=10,20

'、'に注意してください。これは、範囲構文を暗黙的に提供します。minAgeとmaxAgeがあると読みやすくなります。

オープンレンジの場合、次のことができます。 /people?age=10,*

私が行うソート: /people?sortField=name&sortOrder=ascending

于 2010-06-01T21:33:54.773 に答える
1

私はこのようなものに行きます:

GET /PEOPLE?first_name=bob&min_age=30&sort=last_name.asc,age.desc

そして、SQLインジェクションに気をつけてください:)

于 2010-06-01T00:49:38.633 に答える
1

検索を一流のリソースにするという方針を考えてみませんか?以下を参照してください。searchQueryでobjectTypeを指定して、Peopleリソースを検索していることを示すことができます。

/search/{searchQuery}

たとえば、次のクエリは、30〜50歳のすべての人を検索することを示しています。

/search?objectType=People&ageField1=30&ageField2=50&inclusive=true

並べ替えでも同様のことができます。

于 2010-06-01T00:50:47.497 に答える
1

これに関する詳細と洞察をhttp://nsinfra.blogspot.in/2011/12/simplifying-restful-search.htmlで更新しました。これは便利だと思います。

于 2012-06-28T14:41:02.800 に答える