Aracılığıyla paylaş


Data API builder için GraphQL'de birden çok mutasyon

Data API builder (DAB), birden çok mutasyon işlemini tek bir işlemde birleştirmeyi destekler. Birden çok mutasyon, aynı varlığa ait birden çok öğe oluşturmanız veya ilgili bir varlığa ait birden çok öğe oluşturmanız gereken senaryoları destekler. Bu kılavuzda, çoklu mutasyon operasyonu kullanılarak örnek bir senaryoya yol gösterilir.

Önkoşullar

Tablo oluşturma

Kitapları ve ilgili bölümlerini temsil eden iki temel tablo oluşturarak başlayın. Kitapların ilgili bölümleriyle bire çok ilişkisi vardır.

  1. Tercih ettiğiniz istemciyi veya aracı kullanarak SQL veritabanına bağlanın.

  2. , , yeartitleve pages sütunlarıyla idadlı Books bir tablo İçerik Oluşturucu.

    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. , nameve pages sütunlarıyla idadlı Chapters başka bir tablo İçerik Oluşturucu. Tablonun sütunuyla yabancı anahtar ilişkisi olan id bir book_id sütun Books İçerik Oluşturucu.

    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. Tablolarınızın bazı yaygın SQL sorgularıyla oluşturulduğunu doğrulayın.

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

    Not

    Bu noktada sorgular herhangi bir veri döndürmemelidir.

Yapılandırma dosyası oluşturma

Şimdi, bir yapılandırma dosyası, varlıklar ve varlık ilişkileri oluşturmak için DAB CLI'yi kullanın.

  1. Terminal açma

  2. SQL veritabanınızı bağlantı dizesi adlı SQL_CONNECTION_STRINGbir kabuk değişkeni olarak depolayın.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Aşağıdaki özellikleri belirterek komutunu çalıştırın dab init .

    Değer
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string SQL_CONNECTION_STRING Önceki adımda oluşturulan kabuk değişkenini kullanın.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. Komutunu çalıştırarak dab add aşağıdaki özellikleri belirten bir Book varlığı ekleyin.

    Değer
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Şimdi aşağıdaki özellikleri belirten bir Bölüm varlığı eklemek için yeniden çalıştırındab add.

    Değer
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Aşağıdaki özellikleri belirten Bölüme Kitap ilişkisini oluşturmak için komutunu çalıştırındab update.

    Değer
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Son olarak, aşağıdaki özellikleri belirten Bölüm-Kitap ilişkisini oluşturmak için son bir kez çalıştırındab update.

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

Çoklu oluşturma mutasyonu yürütme

Öğeleri sarmak için DAB CLI kullanarak API'yi çalıştırın ve Banana Cake Pop kullanarak GraphQL uç noktasını test edin.

  1. Geçerli yapılandırmayı kullanarak çalışma zamanı altyapısını başlatın.

    dab start
    
  2. Çalışan uygulamanızın /graphql göreli uç noktasına gidin. Bu uç nokta, Banana Cake Pop arabirimini açar.

    Not

    Varsayılan olarak, bu olacaktır https://localhost:5001/graphql.

  3. Veritabanınızdaki iki tabloda üç ayrı satır oluşturmak için bir GraphQL mutasyonu yazın. Bu mutasyon tek bir "çoklu oluşturma" operasyonunda hem hem Chapter de Book varlıkları kullanır. Mutasyon için aşağıdaki özellikleri kullanın.

    Varlık türü ID Name Sayfalar Yıl
    Book 1 Veri API'sini oluşturucuya giriş 200 2024
    Bölüm 2 Yapılandırma dosyaları 150
    Bölüm 3 Çalışma 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. Mutasyondan elde eden çıkışı gözlemleyin. Mutasyon her iki varlık türü için de ilgili verileri oluşturdu.

    {
      "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. Veritabanınızdaki tüm kitapları ilgili bölümleri de dahil olmak üzere almak için GraphQL sorgusu kullanın.

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

    Not

    Bu noktada, sorgunun iki bölümü olan tek bir kitabı döndürmesi gerekir.

  6. İç içe bölüm dizileri de dahil olmak üzere bir dizi kitapla bu sorgunun çıkışını gözlemleyin.

    {
      "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. Tercih ettiğiniz istemciyi veya aracı kullanarak SQL veritabanına yeniden bağlanın.

  8. Verilerinizin bir SQL sorgusu kullanılarak başarıyla oluşturulduğunu doğrulayın.

    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
    

    Not

    Bu sorgu iki bölüm kaydı döndürmelidir.