Data API Builder (DAB) の GraphQL エンドポイントでは、データを精確にクエリおよび変更できます。 各クエリは、必要なフィールドを正確に宣言し、結果のフィルター処理、順序付け、ページングの引数をサポートします。
既定では、DAB は GraphQL エンドポイントを次の位置でホストします。
https://{base_url}/graphql
構成によって公開されるエンティティは、GraphQL スキーマに自動的に含まれます。
たとえば、 books エンティティと authors エンティティがある場合、どちらもスキーマのルート フィールドとして表示されます。
注
最新の GraphQL クライアントまたは IDE (Apollo、不眠症、VS Code GraphQL など) を使用して、スキーマとオートコンプリート フィールドを探索します。
データ API ビルダーでサポートされているキーワード
| 概念 | GraphQL | 目的 |
|---|---|---|
| Projection | 品目 | 返すフィールドを選択する |
| フィルタリング | フィルター | 条件で行を制限する |
| 並べ替え | orderBy | 並べ替え順序を定義する |
| ページ サイズ | first | ページあたりのアイテム数を制限する |
| 継続 | 後 | 最後のページから続行する |
基本構造
すべての GraphQL クエリは、エンティティを表すルート フィールドで始まります。
{
books {
items {
id
title
price
}
}
}
結果は、選択セットと同じ図形を持つ JSON オブジェクトになります。
{
"data": {
"books": {
"items": [
{ "id": 1, "title": "Dune", "price": 20 },
{ "id": 2, "title": "Foundation", "price": 18 }
]
}
}
}
注
既定では、特に構成されていない限り、DAB はクエリごとに最大 100 個の項目を返します (runtime.pagination.default-page-size)。
クエリの種類
各エンティティは、次の 2 つの標準ルート クエリをサポートしています。
| Query | 説明 |
|---|---|
entity_by_pk |
主キーで 1 つのレコードを返します |
entities |
フィルターに一致するレコードの一覧を返します。 |
1 つのレコードを返す例:
{
book_by_pk(id: 1010) {
title
year
}
}
複数の結果を返す例:
{
books {
items {
id
title
}
}
}
結果のフィルター処理
filter引数を使用して、返されるレコードを制限します。
{
books(filter: { title: { contains: "Foundation" } }) {
items { id title }
}
}
このクエリは、タイトルに "Foundation" が含まれるすべての書籍を返します。
フィルターは、比較と論理演算子を組み合わせることができます。
{
authors(filter: {
or: [
{ first_name: { eq: "Isaac" } }
{ last_name: { eq: "Asimov" } }
]
}) {
items { first_name last_name }
}
}
、eq、neq、lt、lteなどのサポートされている演算子については、isNullを参照してください。
結果を並べ替える
orderBy引数は、レコードの並べ替え方法を定義します。
{
books(orderBy: { year: DESC, title: ASC }) {
items { id title year }
}
}
これにより、 year 降順、 title順に並べ替えられた書籍が返されます。
詳細については、 orderBy 引数のリファレンス を参照してください。
結果を制限する
first引数は、1 つの要求で返されるレコードの数を制限します。
{
books(first: 5) {
items { id title }
}
}
これにより、既定で主キー順に並べ替えられた最初の 5 つの書籍が返されます。
first: -1を使用して、構成された最大ページ サイズを要求することもできます。
詳しくは、 最初の引数リファレンスをご覧ください。
継続的な結果
次のページをフェッチするには、前のクエリのカーソルと共に after 引数を使用します。
{
books(first: 5, after: "eyJpZCI6NX0=") {
items { id title }
}
}
after トークンは、前のページが終了した場所をマークします。
詳細については、 後引数のリファレンス を参照してください。
フィールドの選択 (プロジェクション)
GraphQL では、応答に表示されるフィールドを正確に選択します。
SELECT *のようなワイルドカードはありません。 必要なものだけを要求します。
{
books {
items { id title price }
}
}
エイリアスを使用して、応答内のフィールドの名前を変更することもできます。
{
books {
items {
bookTitle: title
cost: price
}
}
}
詳細については 、フィールド プロジェクションリファレンス を参照してください。