次の方法で共有


data API ビルダーのGraphQLでの複数の変更

データ API ビルダー (DAB) では、複数のミューテーション操作を 1 つのトランザクションにまとめる方法がサポートされています。 複数のミューテーションでは、同じエンティティに属する複数のアイテムを作成するか、関連エンティティに属する複数のアイテムを作成する必要があるシナリオがサポートされています。 このガイドでは、複数のミューテーション操作を使用するサンプル シナリオについて説明します。

前提条件

テーブルを作成する

まず、書籍とそれぞれの章を表す 2 つの基本的なテーブルを作成します。 書籍は、対応する章と 一対多 の関係を持っています。

  1. 任意のクライアントまたはツールを使用して SQL データベースに接続します。

  2. 、および 列を使用して という名前BooksのテーブルをyearidtitleCreateします。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
    
  3. Create、、および 列を使用して という名前Chaptersidname別のテーブルを指定pagesします。 外部キーリレーションシップをbook_id持つ列をテーブルのBooks列にidCreateします。

    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
    
  4. 一般的な SQL クエリでテーブルが作成されていることを検証します。

    SELECT * FROM dbo.Books
    
    SELECT * FROM dbo.Chapters
    

    注意

    この時点で、クエリはデータを返すべきではありません。

ビルド構成ファイル

次に、DAB CLI を使用して、構成ファイル、エンティティ、およびエンティティリレーションシップを作成します。

  1. ターミナルを開きます。

  2. SQL データベース 接続文字列 を という名前SQL_CONNECTION_STRINGのシェル変数として格納します。

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. 次のプロパティを指定して を実行 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
    
  4. を実行 dab add して、次のプロパティを指定する Book エンティティを追加します。

    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. もう一度 を実行 dab add して、次のプロパティを指定する Chapter エンティティを追加します。

    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. を実行 dab update して、次のプロパティを指定する Book to Chapter リレーションシップを作成します。

    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. 最後に、最後に 1 回実行 dab update して、次のプロパティを指定 して Chapter to Book リレーションシップを作成します。

    relationship book
    cardinality one
    dab update Chapter --relationship book --target.entity Book --cardinality one
    

複数の作成ミューテーションを実行する

処理をまとめるために、DAB CLI を使用して API を実行し、バナナ ケーキ ポップを使用してGraphQL エンドポイントをテストします。

  1. 現在の構成を使用してランタイム エンジンを起動します。

    dab start
    
  2. 実行中のアプリケーションの /graphql 相対エンドポイントに移動します。 このエンドポイントにより、Banana Cake Pop インターフェイスが開きます。

    注意

    既定では、これは になります https://localhost:5001/graphql

  3. 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
          }
        }
      }
    }
    
  4. ミューテーションからの出力を観察します。 ミューテーションによって、両方のエンティティ型の関連データが作成されました。

    {
      "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
              }
            ]
          }
        }
      }
    }
    
  5. GraphQL クエリを使用して、関連する章を含むデータベース内のすべての書籍を取得します。

    query {
      books {
        items {
          pages
          title
          year
          chapters {
            items {
              name
              pages
            }
          }
        }
      }
    }
    

    注意

    この時点で、クエリは 2 つの章を含む単一の書籍を返す必要があります。

  6. 章の入れ子になった配列を含む書籍の配列を使用して、このクエリからの出力を確認します。

    {
      "data": {
        "books": {
          "items": [
            {
              "pages": 200,
              "title": "Introduction to Data API builder",
              "year": 2024,
              "chapters": {
                "items": [
                  {
                    "name": "Configuration files",
                    "pages": 150
                  },
                  {
                    "name": "Running",
                    "pages": 50
                  }
                ]
              }
            }
          ]
        }
      }
    }
    
  7. 任意のクライアントまたはツールを使用して、SQL データベースにもう一度接続します。

  8. 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 つのチャプター レコードを返す必要があります。