データ API ビルダーで GraphQL エンドポイントをホストする
GraphQL で使用できるように構成されたエンティティは、既定のパス (https://{base_url}//graphql
) で使用できます。 データ API ビルダーは、構成されたすべてのエンティティのクエリ フィールドと変更フィールドを含む 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
: 返されるデータの並べ替え方法を定義します -
first
とafter
: 上位の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
順に並べ替えられた書籍を返します。
first
と after
パラメーター 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 |