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
- Bestaande SQL-server en -database.
- Data API builder CLI. De CLI installeren
- Een databaseclient (SQL Server Management Studio, Azure Data Studio, enzovoort)
- Als u geen client hebt geïnstalleerd, installeert u Azure Data Studio
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.
Maak verbinding met de SQL-database met behulp van de client of het hulpprogramma van uw voorkeur.
Creatie een tabel met de naam
Books
,id
title
,year
enpages
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
Creatie een andere tabel met de naam
Chapters
,id
name
enpages
kolommen. Creatie eenbook_id
kolom met een refererende sleutelrelatie met deid
kolom van deBooks
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
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.
Open een terminal
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>"
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
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:*"
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:*"
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
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.
Start de runtime-engine met behulp van de huidige configuratie.
dab start
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/graphql
dit .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 alsChapter
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 } } } }
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 } ] } } } }
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.
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 } ] } } ] } } }
Maak opnieuw verbinding met de SQL-database met behulp van de client of het hulpprogramma van uw voorkeur.
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.