リソースコレクションのREST urlを設計する方法です。例えばリソースコレクションのREST url。与えられた値と等しくない属性でリソースをフィルタリングします。
、中学2年生の学生を得るために、私たちは中学2年生で生徒ないを取得する必要がある場合は、同じことを行う方法
GET /students?grade=8
を使うのか?どのように(<
)、(>
)などよりも小さく設計するのですか?
リソースコレクションのREST urlを設計する方法です。例えばリソースコレクションのREST url。与えられた値と等しくない属性でリソースをフィルタリングします。
、中学2年生の学生を得るために、私たちは中学2年生で生徒ないを取得する必要がある場合は、同じことを行う方法
GET /students?grade=8
を使うのか?どのように(<
)、(>
)などよりも小さく設計するのですか?
のような追加のクエリパラメータを追加すると、値をgrade
パラメータと比較するときに使用する演算子を渡すことができます。例えば、
GET /students?grade=8&gradeOperator=!%3D
!%3D
は!=
のURL-encoded形ですので、あなたのREST APIは、オペレータをエンコード-解除とgrade != 8
としてこれを解釈します。
もう1つの方法は、HTTP要求本体で値と演算子を渡すことです。このような何か潜在的に(例として、JSONで提供体で)動作します:
いいかもしれないGET /students
Content-Type: application/json
{ "grade": {"value": 8, "operator": "!=" } }
あなたはgradeOperator
に単語「グレード」を繰り返す必要がないため、オペレータが簡単にネストされています値はgrade
のJSONオブジェクト内にあります。いずれかの解決策では
<
、
>
、
>=
、
<=
などだけでDBクエリで使用される場合は特に、適切に、あなたのAPIが受け取る任意の入力演算子をサニタイズするようにしてください
SQL injectionのような攻撃を避けてください。
私が考えているのは、値から区切られた引数の一部として演算子を含めることです。また、パラメータ名の後に等号をつけたり、混乱させたりすることを避けるために、シンボリックでない演算子を定義します。グレード> 8の学生は以下のようになり
GET /students?grade=neq|8
::(包括的)等級8と10の間
GET /students?grade=gt|8
学生:
あなたの例では、これは等級8の学生ではないため、このようなものになるだろうGET /students?grade=gte|8,lte|10
このアプローチは、各フィールドがフィルタリングされる方法を変更するパラメータを追加する必要なく、他のフィルタ可能フィールドに拡張できます。
チェックこのリンクが役に立つ場合 http://stackoverflow.com/questions/4614255/rest-url-design-for-greater-than-less-than-operations – rvini
しかし、それは改ページについての詳細を語ります –