テーブルリソースのフィルタリング
Version 25.3.9411
テーブルリソースのフィルタリング
HTTP GET リクエストを使用して、すべてのテーブルリソースの取得、フィルタリング、並べ替え、およびテーブルから返されるデータの制限が可能です。URL のパスは、取得するテーブルのセットを指定します。例えば、すべてのCars テーブルリソースを取得するには、次のURL を使用します:
http://MyServer:MyPort/api.rsc/Cars
シングルリソース
単一のリソースを取得するには、そのリソースのURL に対してリクエストを送信します。URL を作成するには、目的のリソースの主キーを使用します。次に例を示します:
http://MyServer:MyPort/api.rsc/Cars('1000')
リソースによっては、次の例に示すような索引付きの複数の主キーがある場合があります:
http://MyServer:MyPort/api.rsc/Cars(Id='1000', Date='2024-07-01')
フィルタリング
クライアントアプリケーションは、リクエスト内で提供されるフィルタを元に、複数のリソースを取得することができます。$filter を使用してフィルタリクエストを記述します。例えば、Make がHonda と一致するすべてのリソースを検索するフィルタは次のようになります:
http://MyServer:MyPort/api.rsc/Cars?$filter=Make eq 'Honda'
API Server は、比較のために以下の論理演算子をサポートしています:
| eq | イコール |
| ne | イコールではない |
| gt | 大なり |
| ge | 大なりイコール |
| lt | 小なり |
| le | 小なりイコール |
| not | 否定 |
Tip:次の例で示すように、フィルタの比較にand およびor も使用できます:
http://MyServer:MyPort/api.rsc/Cars?$filter=Make eq 'Honda' and Date lt '2024-07-01'
また、$filter クエリオプションでstartswith、endswith、toupper、tolower、およびcontains 関数を使用することもできます。例えば、次のリクエストは、指定されたサブ文字列を含むプロパティのリソースを返します:
http://MyServer:MyPort/api.rsc/Cars?$filter=contains(Make,'Honda')
プロパティの選択
プロパティのサブセットを取得するには、次の例に示すように$select を使用します:
http://MyServer:MyPort/api.rsc/Cars?$select=Id,Model
これは、リクエスト内のフィルタにマッチするすべてのリソースのId およびModel プロパティを返します。
また、次の例に示すように1つのリソースの個別のプロパティ値を取得することも可能です:
http://MyServer:MyPort/api.rsc/Cars('1000')/Model/$value
並べ替え
次の例に示すように、$orderby を使用してリソースを並べ替えます:
http://MyServer:MyPort/api.rsc/Cars?$orderby=Model asc, Color desc
これは、Model(昇順)、そしてColor(降順)で並べ替えられたリソースを返します。
ページネーション
サーバーサイド
API Server はサーバーサイドページングをサポートしています。これは、設定 > サーバーサイドページングサイズで有効にすることができます。ページサイズが0 より大きく、リクエストがページサイズよりも大きな結果を返す場合、結果の次のページのURL がレスポンスの@odata.nextlink 属性に含まれます。結果の最後のページにはこの属性は含まれません。このURL には、2分間有効なページングトークンが含まれています。例えば、次のレスポンスは3つのリソースを持ち、@odata.nextLink 属性はレコードの次のページのURL を含んでいます:
{
"@odata.context": "http://MyServer:MyPort/api.rsc/$metadata#Cars",
"value": [
{ "Id": "Id_1", "Color": "Color_1", "Model": "Model_1"},
{ "Id": "Id_2", "Color": "Color_2", "Model": "Model_2"},
{ "Id": "Id_3", "Color": "Color_3", "Model": "Model_3"}
],
"@odata.nextLink":"http://MyServer:MyPort/api.rsc/Cars?$skiptoken=0f87696b-aa28-4a70-b13d-c86af8338c80"
}
クライアントサイド
API Server は、$top、$skip、および$count を使用したクライアントサイドページングもサポートしています。
$top=n を使用して、最初のn 個のリソースのみを結果に含めます。例えば、次の要求を使用すると、上位10個のCars リソースを表示できます:
http://MyServer:MyPort/api.rsc/Cars?$top=10
$skip=n を使用して、最初のn 個のリソースを結果から除外します。$top を$skip と組み合わせて使用すると、クライアントサイドのページングを実装できます。$skipは、クエリ内の順番にかかわらず、常に$top の前に適用されます。例えば、次の2つのクエリは、最初の20個の リソースを2ページに分けて取得します:
http://MyServer:MyPort/api.rsc/Cars?$top=10
http://MyServer:MyPort/api.rsc/Cars?$top=10&$skip=10
$count をtrue に設定して、結果のレコードの合計数を返すこともできます。OData バージョン2.0 または3.0 を使用している場合は、代わりに$inlinecount をallpages に設定できます。例えば、次のクエリを考えてみましょう:
http://MyServer:MyPort/api.rsc/Cars?$top=3&$skip=4&$count=true
このクエリは、次のようなレスポンスを返します:
{
"@odata.context": "http://MyServer:MyPort/api.rsc/$metadata#Cars",
"@odata.count": 402,
"value": [
{ "Id": "Id_1", "Color": "Color_1", "Model": "Model_1"},
{ "Id": "Id_2", "Color": "Color_2", "Model": "Model_2"},
{ "Id": "Id_3", "Color": "Color_3", "Model": "Model_3"}
],
"@odata.nextLink":"http://MyServer:MyPort/api.rsc/Account?$skip=7"
}
フィルタに一致した合計数が、単一ページの結果とともにレスポンスで返されます。
Count-Only
次の例に示すように、クエリの特定のフィルタに一致するリソースのカウントのみを取得できます:
http://MyServer:MyPort/api.rsc/Cars?$count=true&$filter=Make eq 'Honda'
レスポンスは、リクエストのフィルタに一致するリソースの行カウントになります。