Delen via


Meerdere mutaties in GraphQL for Data API builder

Data API Builder (DAB) ondersteunt het combineren van meerdere mutatiebewerkingen tot één transactie. Meerdere mutaties ondersteunen scenario's waarbij u meerdere items moet maken die behoren tot dezelfde entiteit of meerdere items moet maken die tot een gerelateerde entiteit behoren. In deze handleiding wordt een voorbeeldscenario beschreven met behulp van een bewerking met meerdere mutaties.

Vereisten

Tabellen maken

Begin met het maken van twee basistabellen voor boeken en hun respectieve hoofdstukken. Boeken hebben een een-op-veel-relatie met de bijbehorende hoofdstukken.

  1. Maak verbinding met de SQL-database met behulp van de client of het hulpprogramma van uw voorkeur.

  2. Creatie een tabel met de naam Books , idtitle, yearen pages kolommen.

    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. Creatie een andere tabel met de naam Chapters , idnameen pages kolommen. Creatie een book_id kolom met een refererende sleutelrelatie met de id kolom van de Books tabel.

    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. Controleer of uw tabellen zijn gemaakt met enkele veelvoorkomende SQL-query's.

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

    Notitie

    Op dit moment mogen de query's geen gegevens retourneren.

Configuratiebestand bouwen

Gebruik nu de DAB CLI om een configuratiebestand, entiteiten en entiteitsrelaties te maken.

  1. Open een terminal

  2. Sla uw SQL-database verbindingsreeks op als een shellvariabele met de naam SQL_CONNECTION_STRING.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Voer uit dab init met de volgende eigenschappen.

    Waarde
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string Gebruik de SQL_CONNECTION_STRING shellvariabele die u in de vorige stap hebt gemaakt.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. Voer uit dab add om een bookentiteit toe te voegen met de volgende eigenschappen.

    Waarde
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Voer opnieuw uit dab add om een chapter-entiteit toe te voegen en nu de volgende eigenschappen op te geven.

    Waarde
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Voer uit dab update om de relatie Boek naar hoofdstuk te maken en de volgende eigenschappen op te geven.

    Waarde
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Voer dab update ten slotte nog een laatste keer uit om de relatie Hoofdstuk naar boek te maken, waarbij u de volgende eigenschappen opgeeft.

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

Meerdere mutaties uitvoeren

Als u alles wilt afronden, gebruikt u de DAB CLI om de API uit te voeren en het GraphQL-eindpunt te testen met behulp van Banana Cake Pop.

  1. Start de runtime-engine met behulp van de huidige configuratie.

    dab start
    
  2. Navigeer naar het /graphql relatieve eindpunt voor uw actieve toepassing. Met dit eindpunt wordt de Interface Banana Cake Pop geopend.

    Notitie

    Standaard is https://localhost:5001/graphqldit .

  3. Maak een GraphQL-mutatie om drie afzonderlijke rijen te maken in twee tabellen in uw database. Deze mutatie maakt gebruik van zowel de Book entiteiten als Chapter de entiteiten in een enkele 'meervoudige maken'-bewerking. Gebruik de volgende eigenschappen voor de mutatie.

    Entiteitstype Id Name Pagina's Year
    Book 1 Inleiding tot Data API Builder 200 2024
    Hoofdstuk 2 Configuratiebestanden 150
    Hoofdstuk 3 Wordt uitgevoerd 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. Bekijk de uitvoer van de mutatie. De mutatie heeft gerelateerde gegevens voor beide entiteitstypen gemaakt.

    {
      "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. Gebruik een GraphQL-query om alle boeken in uw database op te halen, inclusief de bijbehorende hoofdstukken.

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

    Notitie

    Op dit moment moet de query het ene boek met twee hoofdstukken retourneren.

  6. Bekijk de uitvoer van deze query met een matrix van boeken, inclusief de geneste matrix met hoofdstukken.

    {
      "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. Maak opnieuw verbinding met de SQL-database met behulp van de client of het hulpprogramma van uw voorkeur.

  8. Controleer of uw gegevens zijn gemaakt met behulp van een SQL-query.

    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
    

    Notitie

    Deze query moet twee hoofdstukrecords retourneren.