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.)
- Om du inte har en klient installerad installerar du Azure Data Studio
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.
Anslut till SQL-databasen med den klient eller det verktyg du föredrar.
Skapa en tabell med namnet
Books
medid
kolumnerna ,title
, och .pages
year
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
Skapa en annan tabell med namnet
Chapters
medid
kolumnerna , och .pages
name
Skapa enbook_id
kolumn med en sekundärnyckelrelation tillid
kolumnen iBooks
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
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.
Öppna en terminal
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>"
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
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:*"
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:*"
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
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.
Starta körningsmotorn med den aktuella konfigurationen.
dab start
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/graphql
detta .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
ochChapter
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 } } } }
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 } ] } } } }
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.
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 } ] } } ] } } }
Anslut till SQL-databasen igen med den klient eller det verktyg du föredrar.
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.