テーブルリソースのフィルタリング

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 を使用してフィルタリクエストを記述します。例えば、MakeHonda と一致するすべてのリソースを検索するフィルタは次のようになります:

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 クエリオプションでstartswithendswithtouppertolower、および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 を使用している場合は、代わりに$inlinecountallpages に設定できます。例えば、次のクエリを考えてみましょう:

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'

レスポンスは、リクエストのフィルタに一致するリソースの行カウントになります。