プロジェクションは、クライアントが実際に必要とするものだけを返すのに役立ちます。 ペイロードを小さくすると、パフォーマンスが向上し、ネットワーク コストが削減され、クライアント側の解析オーバーヘッドが削減されます。 データ API ビルダー (DAB) は、 $select クエリ パラメーターを使用して REST のプロジェクションを実装します。
注
REST クエリ パラメーター名 ( $selectを含む) では、大文字と小文字が区別されます。 また、フィールド名は、構成または公開された内容に基づいて大文字と小文字が区別されます。
このドキュメントの GraphQL バージョンに移動します。
基本的な選択
パターン
GET /api/{entity}?$select=FieldA,FieldB,FieldC
$selectを省略すると、DAB は呼び出し元のロールが読み取りを許可されているすべてのフィールドを返します (includeとexclude構成とフィールド レベルのアクセス許可の対象)。
*のようなワイルドカード トークンはありません。$selectを省略すると、完全に許可された図形を要求できます。
例示
# Return all accessible fields
GET /api/author
# Return only first_name
GET /api/author?$select=first_name
# Return only first_name and last_name
GET /api/author?$select=first_name,last_name
内部列と応答列
主キーまたは順序付けフィールドを射射する必要はありません。 省略した場合、JSON 応答には表示されません。 ただし、DAB は、セキュリティ ポリシー (行レベルフィルター、フィールド マスク) を適用し、改ページ カーソル ($after / nextLink) を処理するために必要な追加の列を内部的にフェッチする場合があります。
注
これらの内部フェッチ列は、明示的に要求しない限り、応答の前に削除されます。
Example
GET /api/book?$select=id,title&$orderby=publisher_id desc&$first=5
概念 SQL
SELECT TOP (6) -- first (5) + 1 probe row for paging
[b].[id],
[b].[sku_title] AS title
FROM dbo.books AS [b]
ORDER BY [b].[publisher_id] DESC, [b].[id] ASC;
[応答]
{
"value": [
{ "id": 101, "title": "Example 1" },
{ "id": 77, "title": "Example 2" },
{ "id": 42, "title": "Example 3" },
{ "id": 33, "title": "Example 4" },
{ "id": 5, "title": "Example 5" }
],
"nextLink": "..."
}
改ページ位置の詳細と after キーワードについて説明します。
追加の内部列と 6 番目のプローブ行はペイロードに表示されません。
ストアド プロシージャ
ストアド プロシージャに基づくエンティティの場合、 $select はプロジェクション句として解釈されません。 代わりに、クエリ文字列のキーと値のペア ( $filter、 $orderbyなど、認識されるシステム パラメーターを除く) はストアド プロシージャ パラメーターとして扱われます。
$select は何の影響もありません。プロシージャの結果セットによって図形が定義されます。
構成例
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
こちらも参照ください
| 概念 | REST | GraphQL | 目的 |
|---|---|---|---|
| Projection | $select | 品目 | 返すフィールドを選択する |
| フィルタリング | $filter | フィルター | 条件で行を制限する |
| 並べ替え | $orderby | orderBy | 並べ替え順序を定義する |
| ページ サイズ | $first | first | ページあたりのアイテム数を制限する |
| 継続 | $after | 後 | カーソルを使用して最後のページから続行する |
注
REST キーワードは、OData 規則に従って、 $で始まります。