次の方法で共有


データ API ビルダーで GraphQL エンドポイントをホストする

GraphQL で使用できるように構成されたエンティティは、既定のパス (https://{base_url}//graphql) で使用できます。 データ API ビルダーは、構成されたすべてのエンティティのクエリ フィールドと変更フィールドを含む GraphQL スキーマを自動的に生成します。 GraphQL スキーマは、オートコンプリートなどの機能を含む最新の GraphQL クライアントを使用して調べることができます。

と GraphQL アクセス用に構成された エンティティがある 例の の概要に従った場合は、GraphQL の使いやすさを確認できます。

結果セットの形式

返される結果は、次の形式の JSON オブジェクトです。

{
    "data": {}    
}

手記

既定では、最初の 100 個の項目のみが返されます。

サポートされているルートの種類

データ API ビルダーでは、次の GraphQL ルート型がサポートされています。

クエリミューテーション

クエリ

各エンティティには、次のアクションがサポートされています。

データ API ビルダーは、特に指定しない限り、クエリが 1 つの項目を返すと予想される場合は常に、エンティティの 単一の 名を使用します。 逆に、データ API ビルダーは、クエリが項目の一覧を返すと予想される場合に、エンティティの 複数形の 名を使用します。 たとえば、book エンティティには次のものが含まれます。

  • book_by_pk(): 0 または 1 つのエンティティを返します。
  • books(): 0 個以上のエンティティのリストを返します。

ページネーション

0 個以上の項目を返すクエリの種類はすべて、改ページ位置の修正をサポートします。

{
  books
  {
    items {
      title
    }
    hasNextPage
    endCursor
  }
}
  • item オブジェクトはエンティティ フィールドへのアクセスを許可します
  • 返される項目が他にある場合、hasNextPage は true に設定されます
  • endCursor は、first および after クエリ パラメーターと共に使用して、項目の次のセット (またはページ) を取得できる不透明なカーソル文字列を返します。

主キーによるクエリ

すべてのエンティティは、次のクエリ形式を使用して、主キーを使用した特定の項目の取得をサポートします。

<entity>_by_pk(<pk_colum>:<pk_value>)
{
    <fields>
}

例えば:

{
  book_by_pk(id:1010) {
    title
  }
}

汎用クエリ

すべてのエンティティでは、次のパラメーターを使用して、必要な項目のみを必要な順序で要求できるように、汎用クエリ パターンもサポートされています。

  • filter: 返されたアイテムをフィルター処理します
  • orderBy: 返されるデータの並べ替え方法を定義します
  • firstafter: 上位の n 項目のみを返します

例えば:

{
  authors(
    filter: {
        or: [
          { first_name: { eq: "Isaac" } }
          { last_name: { eq: "Asimov" } }
        ]
    }
  ) {
    items {
      first_name
      last_name
      books(orderBy: { year: ASC }) {
        items {
          title
          year
        }
      }
    }
  }
}

filter

filter パラメーターの値は、エンティティのフィールドを使用する述語式 (ブール値を返す式) です。 式が 'True' と評価される項目のみが応答に含まれます。 例えば:

{
  books(filter: { title: { contains: "Foundation" } })
  {
    items {
      id
      title
      authors {
        items {
          first_name
          last_name
        }
      }
    }
  }
}

このクエリは、タイトルに Foundation という単語が含まれるすべての書籍を返します。

filter パラメーターでサポートされる演算子は次のとおりです。

演算子 種類 形容
eq 比較 等しい books(filter: { title: { eq: "Foundation" } })
neq 比較 等しくない books(filter: { title: { neq: "Foundation" } })
gt 比較 より大きい books(filter: { year: { gt: 1990 } })
gte 比較 以上 books(filter: { year: { gte: 1990 } })
lt 比較 未満 books(filter: { year: { lt: 1990 } })
lte 比較 以下 books(filter: { year: { lte: 1990 } })
isNull 比較 null です books(filter: { year: { isNull: true} })
contains 含む books(filter: { title: { contains: "Foundation" } })
notContains 含まれない books(filter: { title: { notContains: "Foundation" } })
startsWith で始まる books(filter: { title: { startsWith: "Foundation" } })
endsWith End with books(filter: { title: { endsWith: "Empire" } })
and 合理的 論理と authors(filter: { and: [ { first_name: { eq: "Robert" } } { last_name: { eq: "Heinlein" } } ] })
or 合理的 論理または authors(filter: { or: [ { first_name: { eq: "Isaac" } } { first_name: { eq: "Dan" } } ] })

orderBy

orderby の値は、結果セット内の項目が返される順序を設定します。 例えば:

{
  books(orderBy: {title: ASC} )
  {
    items {
      id
      title
    }
  }
}

このクエリは、title順に並べ替えられた書籍を返します。

firstafter

パラメーター first は、返される項目の数を制限します。 例えば:

query {
  books(first: 5)
  {
    items {
      id
      title
    }
    hasNextPage
    endCursor
  }
}

このクエリは、最初の 5 冊の書籍を返します。 orderBy が指定されていない場合、項目は基になる主キーに基づいて順序付けられます。 orderBy に指定する値は正の整数である必要があります。

book エンティティ内に、firstを介して要求されたエンティティよりも多くの項目がある場合、hasNextPage フィールドは trueと評価され、endCursor は次の項目にアクセスするために after パラメーターと共に使用できる文字列を返します。 例えば:

query {
  books(first: 5, after: "W3siVmFsdWUiOjEwMDQsIkRpcmVjdGlvbiI6MCwiVGFibGVTY2hlbWEiOiIiLCJUYWJsZU5hbWUiOiIiLCJDb2x1bW5OYW1lIjoiaWQifV0=")
  {
    items {
      id
      title
    }
    hasNextPage
    endCursor
  }
}

変異

エンティティごとに、作成、更新、および削除操作をサポートする変更が自動的に作成されます。 変更操作は、次の名前パターンを使用して作成されます: <operation><entity>。 たとえば、book エンティティの場合、変更は次のようになります。

  • createbook: 新しい書籍を作成する
  • updatebook: 既存の書籍を更新する
  • deletebook: 指定した書籍を削除します。

創造する

目的のエンティティの新しい要素を作成するために、create<entity> の変更が提供されます。 作成された変更には、エンティティの必須フィールドの値を新しい項目の作成時に使用する item パラメーターが指定されている必要があります。

create<entity>(item: <entity_fields>)
{
    <fields>
}

例えば:

mutation {
  createbook(item: {
    id: 2000,
    title: "Leviathan Wakes"    
  }) {
    id
    title
  }  
}

更新

目的のエンティティの要素を更新するために、update<entity> の変更が提供されます。 更新プログラムの変更には、次の 2 つのパラメーターが必要です。

  • <primary_key>、更新する要素を識別するための主キー列と関連する値のキー値リスト
  • item: 指定された項目を更新するときに使用するエンティティの必須フィールド値を持つパラメーター
update<entity>(<pk_colum>:<pk_value>, [<pk_colum>:<pk_value> ... <pk_colum>:<pk_value>,] item: <entity_fields>)
{
    <fields>
}

例えば:

mutation {
  updatebook(id: 2000, item: {
    year: 2011,
    pages: 577    
  }) {
    id
    title
    year
    pages
  }
}

削除

目的のエンティティの要素を削除するために、delete<entity> の変更が提供されます。 削除する要素の主キーは必須のパラメーターです。

delete<entity>(<pk_colum>:<pk_value>, [<pk_colum>:<pk_value> ... <pk_colum>:<pk_value>,])
{
    <fields>
}

例えば:

mutation {
  deletebook(id: 1234)
  {
    id
    title
  }  
}

変更のデータベース トランザクション

一般的な GraphQL 変更要求を処理するために、データ API ビルダーは 2 つのデータベース クエリを構築します。 データベース クエリの 1 つが、変更に関連付けられている更新 (または) 挿入 (または) 削除アクションを実行します。 もう 1 つのデータベース クエリは、選択セットで要求されたデータをフェッチします。

データ API ビルダーは、トランザクションで両方のデータベース クエリを実行します。 トランザクションは、SQL データベースの種類に対してのみ作成されます。

次の表に、データベースの種類ごとにトランザクションを作成する分離レベルを示します。

データベースの種類 分離レベル 詳細情報
Azure SQL (または) SQL Server Read Committed Azure SQL の
MySQL 反復可能読み取り MySQL の
PostgreSQL Read Committed PostgreSQL