Freigeben über


Mehrere Mutationen in GraphQL für Daten-API-Generator

Data API Builder (DAB) unterstützt die Kombination mehrerer Mutationsvorgänge in einer einzelnen Transaktion. Mehrere Mutationen unterstützen Szenarien, in denen Sie mehrere Elemente derselben Entität erstellen oder mehrere Elemente erstellen müssen, die zu einer verwandten Entität gehören. In diesem Leitfaden wird ein Beispielszenario mithilfe eines Vorgangs mit mehreren Mutationen beschrieben.

Voraussetzungen

Erstellen von Tabellen

Erstellen Sie zunächst zwei grundlegende Tabellen, um Bücher und ihre jeweiligen Kapitel darzustellen. Bücher haben eine 1 :n-Beziehung zu den entsprechenden Kapiteln.

  1. Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools eine Verbindung mit der SQL-Datenbank her.

  2. Create eine Tabelle mit den Books Spalten , title, yearund pages aus.id

    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 eine weitere Tabelle mit idden Chapters Spalten , nameundpages. Create eine book_id Spalte mit einer Fremdschlüsselbeziehung zur id Spalte der Books Tabelle.

    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. Überprüfen Sie, ob Ihre Tabellen mit einigen gängigen SQL-Abfragen erstellt wurden.

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

    Hinweis

    An diesem Punkt sollten die Abfragen keine Daten zurückgeben.

Erstellen einer Konfigurationsdatei

Verwenden Sie nun die DAB CLI, um eine Konfigurationsdatei, Entitäten und Entitätsbeziehungen zu erstellen.

  1. Öffnen Sie ein Terminal.

  2. Speichern Sie Ihre SQL-Datenbank Verbindungszeichenfolge als Shellvariable namens SQL_CONNECTION_STRING.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Führen Sie dab init aus, um die folgenden Eigenschaften anzugeben.

    Wert
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string Verwenden Sie die SQL_CONNECTION_STRING shellvariable, die im vorherigen Schritt erstellt wurde.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. Führen Sie aus dab add , um eine Book-Entität hinzuzufügen, die die folgenden Eigenschaften angibt.

    Wert
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Führen Sie erneut aus dab add , um eine Chapter-Entität hinzuzufügen, die nun die folgenden Eigenschaften angibt.

    Wert
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Führen Sie aus dab update , um die Beziehung Buch zu Kapitel unter Angabe der folgenden Eigenschaften zu erstellen.

    Wert
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Führen Sie schließlich ein letztes Mal aus dab update , um die Beziehung Kapitel zu Buch unter Angabe der folgenden Eigenschaften zu erstellen.

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

Ausführen mehrerer Erstellungsmutationen

Zum Abschluss verwenden Sie die DAB CLI, um die API auszuführen und den GraphQL Endpunkt mit Banana Cake Pop zu testen.

  1. Starten Sie die Runtime-Engine mit der aktuellen Konfiguration.

    dab start
    
  2. Navigieren Sie zum relativen /graphql Endpunkt für Ihre ausgeführte Anwendung. Dieser Endpunkt öffnet die Banana Cake Pop-Schnittstelle.

    Hinweis

    Standardmäßig ist https://localhost:5001/graphqldies .

  3. Erstellen Sie eine GraphQL Mutation, um drei unterschiedliche Zeilen über zwei Tabellen in Ihrer Datenbank zu erstellen. Diese Mutation verwendet sowohl die Book Entitäten als Chapter auch in einem einzelnen Vorgang mit mehrfacher Erstellung. Verwenden Sie die folgenden Eigenschaften für die Mutation.

    Entitätstyp ID Name Seiten Year
    Buch 1 Einführung in den Daten-API-Generator 200 2024
    Kapitel 2 Konfigurationsdateien 150
    Kapitel 3 Wird ausgeführt 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. Beobachten Sie die Ausgabe der Mutation. Die Mutation hat verwandte Daten für beide Entitätstypen erstellt.

    {
      "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. Verwenden Sie eine GraphQL Abfrage, um alle Bücher in Ihrer Datenbank einschließlich der zugehörigen Kapitel abzurufen.

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

    Hinweis

    An diesem Punkt sollte die Abfrage das einzelne Buch mit zwei Kapiteln zurückgeben.

  6. Beobachten Sie die Ausgabe dieser Abfrage mit einem Array von Büchern, einschließlich ihres geschachtelten Arrays von Kapiteln.

    {
      "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. Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools erneut eine Verbindung mit der SQL-Datenbank her.

  8. Überprüfen Sie mithilfe einer SQL-Abfrage, ob Ihre Daten erfolgreich erstellt wurden.

    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
    

    Hinweis

    Diese Abfrage sollte zwei Kapiteldatensätze zurückgeben.