Sdílet prostřednictvím


Několik mutací v GraphQL pro tvůrce rozhraní Data API

Nástroj pro rozhraní Data API (DAB) podporuje kombinování více operací změn v rámci jediné transakce. Vícenásobné mutace podporují scénáře, ve kterých potřebujete vytvořit více položek patřících stejné entitě nebo vytvořit více položek patřících k související entitě. Tato příručka vás provede ukázkovým scénářem s využitím více mutací v jedné operaci.

Požadavky

Vytváření tabulek

Začněte vytvořením dvou základních tabulek, které představují knihy a jejich příslušné kapitoly. Knihy mají vztah jedna ku mnoha se svými odpovídajícími kapitolami.

  1. Připojte se k databázi SQL pomocí preferovaného klienta nebo nástroje.

  2. Vytvořte tabulku pojmenovanou Books se sloupci id, title, year a pages.

    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. Vytvořte další tabulku s názvem Chapters, id, name a pages sloupci. Vytvořte book_id sloupec s relací cizího klíče se id sloupcem Books tabulky.

    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. Ověřte, že se tabulky vytvářejí pomocí některých běžných dotazů SQL.

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

    Poznámka:

    V tomto okamžiku by dotazy neměly vracet žádná data.

Konfigurační soubor sestavení

Teď pomocí rozhraní příkazového řádku DAB vytvořte konfigurační soubor, entity a relace entit.

  1. Otevření terminálu

  2. Uložte připojovací řetězec databáze SQL jako proměnnou prostředí s názvem SQL_CONNECTION_STRING.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Spusťte dab init zádáním následujících vlastností.

    Hodnota
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string Použijte proměnnou skořápky SQL_CONNECTION_STRING vytvořenou v předchozím kroku.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. Spuštěním dab add přidejte entitu Knihy určující následující vlastnosti.

    Hodnota
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Znovu spusťte dab add a přidejte entitu kapitoly , která teď určuje následující vlastnosti.

    Hodnota
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Spuštěním dab update příkazu vytvořte relaci Book to Chapter určující následující vlastnosti.

    Hodnota
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Nakonec spusťte dab update jednou naposledy, abyste vytvořili relaci Kapitola k knize , která určuje následující vlastnosti.

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

Spusťte více operací vytvoření mutace

Pro závěr použijte rozhraní příkazového řádku (CLI) DAB ke spuštění rozhraní API a otestování koncového bodu GraphQL pomocí Banana Cake Pop.

  1. Spusťte modul runtime pomocí aktuální konfigurace.

    dab start
    
  2. Přejděte na relativní koncový bod vaší běžící aplikace. Tento koncový bod otevře rozhraní Banana Cake Pop.

    Poznámka:

    Ve výchozím nastavení by to bylo https://localhost:5001/graphql.

  3. Vytvořte GraphQL mutaci, která vytvoří tři různé řádky ve dvou tabulkách vaší databáze. Tato mutace používá entity Book a Chapter v jediné operaci "hromadného vytvoření". Pro mutaci použijte následující vlastnosti.

    Typ entita ID Název Stránky Rok
    Kniha 1 Úvod do Tvůrce rozhraní DATA API 200 2024
    Kapitola 2 Konfigurační soubory sto padesát
    Kapitola 3 Běhání 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. Sledujte výstup mutace. Mutaci vytvořila související data pro oba typy entit.

    {
      "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. Pomocí dotazu GraphQL můžete načíst všechny knihy v databázi včetně souvisejících kapitol.

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

    Poznámka:

    V tomto okamžiku by dotaz měl vrátit jednu knihu se dvěma kapitolami.

  6. Prohlédněte si výstup tohoto dotazu s polem knih, které zahrnuje jejich vnořené pole kapitol.

    {
      "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. Znovu se připojte k databázi SQL pomocí preferovaného klienta nebo nástroje.

  8. Ověřte, že se data úspěšně vytvořila pomocí dotazu SQL.

    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
    

    Poznámka:

    Tento dotaz by měl vrátit dva záznamy kapitol.