Dela via


Flera mutationer i GraphQL for Data API Builder

Data API Builder (DAB) har stöd för att kombinera flera mutationsåtgärder i en enda transaktion. Flera mutationer stöder scenarier där du behöver skapa flera objekt som tillhör samma entitet eller skapa flera objekt som tillhör en relaterad entitet. Den här guiden går igenom ett exempelscenario med hjälp av en åtgärd med flera mutationer.

Förutsättningar

  • Befintlig SQL-server och databas.
  • Cli för data-API-byggare. Installera CLI
  • En databasklient (SQL Server Management Studio, Azure Data Studio osv.)

Skapa tabeller

Börja med att skapa två grundläggande tabeller som representerar böcker och deras respektive kapitel. Böcker har en en-till-många-relation med motsvarande kapitel.

  1. Anslut till SQL-databasen med den klient eller det verktyg du föredrar.

  2. Skapa en tabell med namnet Books med idkolumnerna , title, och .pagesyear

    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. Skapa en annan tabell med namnet Chapters med idkolumnerna , och .pagesname Skapa en book_id kolumn med en sekundärnyckelrelation till id kolumnen i Books tabellen.

    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. Kontrollera att dina tabeller har skapats med några vanliga SQL-frågor.

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

    Anteckning

    I det här läget bör frågorna inte returnera några data.

Skapa konfigurationsfil

Använd nu DAB CLI för att skapa en konfigurationsfil, entiteter och entitetsrelationer.

  1. Öppna en terminal

  2. Lagra din SQL-databas anslutningssträng som en gränssnittsvariabel med namnet SQL_CONNECTION_STRING.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Kör dab init och ange följande egenskaper.

    Värde
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string Använd gränssnittsvariabeln SQL_CONNECTION_STRING som skapades i föregående steg.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. Kör dab add för att lägga till en bokentitet som anger följande egenskaper.

    Värde
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Kör dab add igen för att lägga till en kapitelentitet som nu anger följande egenskaper.

    Värde
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Kör dab update för att skapa relationen Bok till kapitel som anger följande egenskaper.

    Värde
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. dab update Kör slutligen en sista gång för att skapa relationen kapitel till bok som anger följande egenskaper.

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

Köra mutation med flera skapanden

Om du vill omsluta saker använder du DAB CLI för att köra API:et och testa GraphQL-slutpunkten med Hjälp av Banana Cake Pop.

  1. Starta körningsmotorn med den aktuella konfigurationen.

    dab start
    
  2. Navigera till den /graphql relativa slutpunkten för ditt program som körs. Den här slutpunkten öppnar Banana Cake Pop-gränssnittet.

    Anteckning

    Som standard är https://localhost:5001/graphqldetta .

  3. Skapa en GraphQL-mutation för att skapa tre distinkta rader i två tabeller i databasen. Den här mutationen använder både entiteterna Book och Chapter i en enda "multiple create"-åtgärd. Använd följande egenskaper för mutationen.

    Entitetstyp ID Name Sidor Year
    Bok 1 Introduktion till Data API Builder 200 2024
    Kapitel 2 Konfigurationsfiler 150
    Kapitel 3 Körs 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. Observera utdata från mutationen. Mutationen skapade relaterade data för båda entitetstyperna.

    {
      "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. Använd en GraphQL-fråga för att hämta alla böcker i databasen, inklusive deras relaterade kapitel.

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

    Anteckning

    Nu bör frågan returnera den enskilda boken med två kapitel.

  6. Observera utdata från den här frågan med en matris med böcker, inklusive deras kapslade matris med kapitel.

    {
      "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. Anslut till SQL-databasen igen med den klient eller det verktyg du föredrar.

  8. Kontrollera att dina data har skapats med hjälp av en SQL-fråga.

    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
    

    Anteckning

    Den här frågan ska returnera två kapitelposter.