Aracılığıyla paylaş


Data API oluşturucusu için GraphQL'de birden çok mutasyon

Veri API'si oluşturucusu (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 işleminin kullanıldığı örnek senaryolarda yol gösterilir.

Önkoşullar

Tablo oluştur

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. Books adlı id, title, year ve pages sütunlarıyla bir tablo oluşturun.

    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 oluşturun. book_id sütununda Books tablosunun id sütunuyla yabancı anahtar ilişkisi kurarak bir sütun oluşturun.

    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
    

    Uyarı

    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ı bağlantı dizenizi 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 Kitap 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 belirterek Kitap-Bölüm 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
    

Birden çok 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ı motorunu 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.

    Uyarı

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

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

    Varlık türü Kimlik İsim Sayfalar Yıl
    Kitap 1 Veri API'sini oluşturucuya giriş 200 2024
    Bölüm 2 Yapılandırma dosyaları Yüz elli
    Bölüm 3 Koşmak 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. Mutasyonun çıktısını 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 ilgili bölümler de dahil olmak üzere tüm kitapları almak için GraphQL sorgusu kullanın.

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

    Uyarı

    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 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
    

    Uyarı

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