data API ビルダーのGraphQLでの複数の変更
データ API ビルダー (DAB) では、複数のミューテーション操作を 1 つのトランザクションにまとめる方法がサポートされています。 複数のミューテーションでは、同じエンティティに属する複数のアイテムを作成するか、関連エンティティに属する複数のアイテムを作成する必要があるシナリオがサポートされています。 このガイドでは、複数のミューテーション操作を使用するサンプル シナリオについて説明します。
前提条件
- 既存の SQL サーバーとデータベース。
- データ API ビルダー CLI。 CLI をインストールする
- データベース クライアント (SQL Server Management Studio、Azure Data Studio など)
- クライアントがインストールされていない場合は、Azure Data Studio をインストールします
テーブルを作成する
まず、書籍とそれぞれの章を表す 2 つの基本的なテーブルを作成します。 書籍は、対応する章と 一対多 の関係を持っています。
任意のクライアントまたはツールを使用して SQL データベースに接続します。
、および 列を使用して という名前
Books
のテーブルをyear
id
title
Createします。pages
DROP TABLE IF EXISTS dbo.Books; CREATE TABLE dbo.Books ( id int NOT NULL PRIMARY KEY, title nvarchar(1000) NOT NULL, [year] int null, [pages] int null ) GO
Create、、および 列を使用して という名前
Chapters
のid
name
別のテーブルを指定pages
します。 外部キーリレーションシップをbook_id
持つ列をテーブルのBooks
列にid
Createします。DROP TABLE IF EXISTS dbo.Chapters; CREATE TABLE dbo.Chapters ( id int NOT NULL PRIMARY KEY, [name] nvarchar(1000) NOT NULL, [pages] int null, book_id int NOT NULL, FOREIGN KEY (book_id) REFERENCES dbo.Books(id) ) GO
一般的な SQL クエリでテーブルが作成されていることを検証します。
SELECT * FROM dbo.Books
SELECT * FROM dbo.Chapters
注意
この時点で、クエリはデータを返すべきではありません。
ビルド構成ファイル
次に、DAB CLI を使用して、構成ファイル、エンティティ、およびエンティティリレーションシップを作成します。
ターミナルを開きます。
SQL データベース 接続文字列 を という名前
SQL_CONNECTION_STRING
のシェル変数として格納します。SQL_CONNECTION_STRING="<your-sql-connection-string>"
$SQL_CONNECTION_STRING="<your-sql-connection-string>"
次のプロパティを指定して を実行
dab init
します。値 database-type
mssql
graphql.multiple-create.enabled
true
host-mode
development
connection-string
前の SQL_CONNECTION_STRING
手順で作成したシェル変数を使用します。dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
を実行
dab add
して、次のプロパティを指定する Book エンティティを追加します。値 source
dbo.Books
permissions
anonymous:*
dab add Book --source "dbo.Books" --permissions "anonymous:*"
もう一度 を実行
dab add
して、次のプロパティを指定する Chapter エンティティを追加します。値 source
dbo.Chapters
permissions
anonymous:*
dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"
を実行
dab update
して、次のプロパティを指定する Book to Chapter リレーションシップを作成します。値 relationship
chapters
cardinality
many
dab update Book --relationship chapters --target.entity Chapter --cardinality many
最後に、最後に 1 回実行
dab update
して、次のプロパティを指定 して Chapter to Book リレーションシップを作成します。値 relationship
book
cardinality
one
dab update Chapter --relationship book --target.entity Book --cardinality one
複数の作成ミューテーションを実行する
処理をまとめるために、DAB CLI を使用して API を実行し、バナナ ケーキ ポップを使用してGraphQL エンドポイントをテストします。
現在の構成を使用してランタイム エンジンを起動します。
dab start
実行中のアプリケーションの
/graphql
相対エンドポイントに移動します。 このエンドポイントにより、Banana Cake Pop インターフェイスが開きます。注意
既定では、これは になります
https://localhost:5001/graphql
。GraphQLミューテーションを作成して、データベース内の 2 つのテーブルに対して 3 つの異なる行を作成します。 このミューテーションでは、1 つの "複数作成
Book
" 操作で エンティティとChapter
エンティティの両方が使用されます。 ミューテーションには、次のプロパティを使用します。エンティティ型 id 名前 ページ Year Book 1 データ API ビルダーの概要 200 2024 章 2 構成ファイル 150 章 3 実行中 50 mutation { createBook( item: { id: 1 title: "Introduction to Data API builder" pages: 200 year: 2024 chapters: [ { id: 2 name: "Configuration files", pages: 150 } { id: 3 name: "Running", pages: 50 } ] } ) { id title pages year chapters { items { name pages } } } }
ミューテーションからの出力を観察します。 ミューテーションによって、両方のエンティティ型の関連データが作成されました。
{ "data": { "createBook": { "id": 1, "title": "Introduction to Data API builder", "pages": 200, "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } } }
GraphQL クエリを使用して、関連する章を含むデータベース内のすべての書籍を取得します。
query { books { items { pages title year chapters { items { name pages } } } } }
注意
この時点で、クエリは 2 つの章を含む単一の書籍を返す必要があります。
章の入れ子になった配列を含む書籍の配列を使用して、このクエリからの出力を確認します。
{ "data": { "books": { "items": [ { "pages": 200, "title": "Introduction to Data API builder", "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } ] } } }
任意のクライアントまたはツールを使用して、SQL データベースにもう一度接続します。
SQL クエリを使用してデータが正常に作成されたことを検証します。
SELECT c.name AS chapterName, c.pages AS chapterPages, b.title AS bookName, b.year AS releaseYear FROM dbo.Chapters c LEFT JOIN dbo.Books b ON b.id = c.book_id
注意
このクエリは、2 つのチャプター レコードを返す必要があります。