第6章 API でのフィルタリング
システムはコレクションを "queryset" として認識します。さまざまな Operator を使用してこれをフィルタリングできます。
手順
"foo" という名前を含むグループを検索するには、以下を使用します。
http://<gateway server name>/api/controller/v2/groups/?name__contains=foo完全一致を検索するには、次を使用します。
http://<gateway server name>/api/controller/v2/groups/?name=fooリソースが整数型の場合、次のように、文字列入力値を整数にキャストするには、末尾に
\_\_intを追加する必要があります。http://<gateway server name>/api/controller/v2/arbitrary_resource/?x__int=5以下を使用して、関連リソースをクエリーできます。
http://<gateway server name>/api/gateway/v1/users/?first_name__icontains=kimこれは、名前に文字列 "Kim" が含まれるすべてのユーザーを返します。
一度に複数のフィールドをフィルタリングすることもできます。
http://<gateway server name>/api/controller/v2/groups/?name__icontains=test&has_active_failures=falseこの場合は、名前に "test" が含まれており、現在障害が発生していないグループがすべて返されます。
注記UI を使って各基準に対してフィルタリングを実行している際に、API を確認することもできます。
6.1. API の高度なクエリー リンクのコピーリンクがクリップボードにコピーされました!
返される結果のリストを、指定された値に一致するアイテムだけに絞り込むために使用される追加のクエリー文字列パラメーターを使用できます。フィルタリングには、データベース内に存在するフィールドとリレーションのみを使用できます。指定された値の特殊文字が URL でエンコードされていることを確認します。以下に例を示します。
?field=value%20xyz
フィールドは関係にまで及ぶ可能性がありますが、その場合はデータベースで定義されたフィールドと関係に限定されます。
?other__field=value
特定の基準に一致する結果を除外するには、フィールドパラメーターの前に not__ を追加します。
?not__field=value
デフォルトでは、すべてのクエリー文字列フィルターは AND 演算されるため、すべてのフィルターに一致する結果のみが返されます。複数の条件のいずれかに一致する結果をまとめるには、各クエリー文字列パラメーターの前に or__ を付けます。
?or__field=value&or__field=othervalue
?or__not__field=value&or__field=othervalue
デフォルトの AND フィルタリングでは、データベースリレーションシップ全体でフィルタリングされる各関連オブジェクトにすべてのフィルターが同時に適用されます。チェーンフィルターは、代わりに関連するオブジェクトごとにフィルターを個別に適用します。これを使用するには、クエリー文字列パラメーターの前に chain__ を付けます。
?chain__related__field=value&chain__related__field2=othervalue
?chain__not__related__field=value&chain__related__field2=othervalue
最初のクエリーを ?relatedfield=value&relatedfield2=othervalue と記述すると、同じ関連オブジェクトが両方の条件を満たしたプライマリーオブジェクトのみが返されます。チェーンフィルターを使用して記述すると、各条件に一致するプライマリーオブジェクトが交差している内容が返されます。