Mehrere Mutationen in GraphQL für Daten-API-Generator
Data API Builder (DAB) unterstützt die Kombination mehrerer Mutationsvorgänge in einer einzelnen Transaktion. Mehrere Mutationen unterstützen Szenarien, in denen Sie mehrere Elemente derselben Entität erstellen oder mehrere Elemente erstellen müssen, die zu einer verwandten Entität gehören. In diesem Leitfaden wird ein Beispielszenario mithilfe eines Vorgangs mit mehreren Mutationen beschrieben.
Voraussetzungen
- Vorhandene SQL Server und Datenbank.
- Daten-API-Generator CLI. Installieren der Befehlszeilenschnittstelle
- Ein Datenbankclient (SQL Server Management Studio, Azure Data Studio usw.)
- Wenn Sie keinen Client installiert haben, installieren Sie Azure Data Studio.
Erstellen von Tabellen
Erstellen Sie zunächst zwei grundlegende Tabellen, um Bücher und ihre jeweiligen Kapitel darzustellen. Bücher haben eine 1 :n-Beziehung zu den entsprechenden Kapiteln.
Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools eine Verbindung mit der SQL-Datenbank her.
Create eine Tabelle mit den
Books
Spalten ,title
,year
undpages
aus.id
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
Create eine weitere Tabelle mit
id
denChapters
Spalten ,name
undpages
. Create einebook_id
Spalte mit einer Fremdschlüsselbeziehung zurid
Spalte derBooks
Tabelle.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
Überprüfen Sie, ob Ihre Tabellen mit einigen gängigen SQL-Abfragen erstellt wurden.
SELECT * FROM dbo.Books
SELECT * FROM dbo.Chapters
Hinweis
An diesem Punkt sollten die Abfragen keine Daten zurückgeben.
Erstellen einer Konfigurationsdatei
Verwenden Sie nun die DAB CLI, um eine Konfigurationsdatei, Entitäten und Entitätsbeziehungen zu erstellen.
Öffnen Sie ein Terminal.
Speichern Sie Ihre SQL-Datenbank Verbindungszeichenfolge als Shellvariable namens
SQL_CONNECTION_STRING
.SQL_CONNECTION_STRING="<your-sql-connection-string>"
$SQL_CONNECTION_STRING="<your-sql-connection-string>"
Führen Sie
dab init
aus, um die folgenden Eigenschaften anzugeben.Wert database-type
mssql
graphql.multiple-create.enabled
true
host-mode
development
connection-string
Verwenden Sie die SQL_CONNECTION_STRING
shellvariable, die im vorherigen Schritt erstellt wurde.dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
Führen Sie aus
dab add
, um eine Book-Entität hinzuzufügen, die die folgenden Eigenschaften angibt.Wert source
dbo.Books
permissions
anonymous:*
dab add Book --source "dbo.Books" --permissions "anonymous:*"
Führen Sie erneut aus
dab add
, um eine Chapter-Entität hinzuzufügen, die nun die folgenden Eigenschaften angibt.Wert source
dbo.Chapters
permissions
anonymous:*
dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"
Führen Sie aus
dab update
, um die Beziehung Buch zu Kapitel unter Angabe der folgenden Eigenschaften zu erstellen.Wert relationship
chapters
cardinality
many
dab update Book --relationship chapters --target.entity Chapter --cardinality many
Führen Sie schließlich ein letztes Mal aus
dab update
, um die Beziehung Kapitel zu Buch unter Angabe der folgenden Eigenschaften zu erstellen.Wert relationship
book
cardinality
one
dab update Chapter --relationship book --target.entity Book --cardinality one
Ausführen mehrerer Erstellungsmutationen
Zum Abschluss verwenden Sie die DAB CLI, um die API auszuführen und den GraphQL Endpunkt mit Banana Cake Pop zu testen.
Starten Sie die Runtime-Engine mit der aktuellen Konfiguration.
dab start
Navigieren Sie zum relativen
/graphql
Endpunkt für Ihre ausgeführte Anwendung. Dieser Endpunkt öffnet die Banana Cake Pop-Schnittstelle.Hinweis
Standardmäßig ist
https://localhost:5001/graphql
dies .Erstellen Sie eine GraphQL Mutation, um drei unterschiedliche Zeilen über zwei Tabellen in Ihrer Datenbank zu erstellen. Diese Mutation verwendet sowohl die
Book
Entitäten alsChapter
auch in einem einzelnen Vorgang mit mehrfacher Erstellung. Verwenden Sie die folgenden Eigenschaften für die Mutation.Entitätstyp ID Name Seiten Year Buch 1 Einführung in den Daten-API-Generator 200 2024 Kapitel 2 Konfigurationsdateien 150 Kapitel 3 Wird ausgeführt 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 } } } }
Beobachten Sie die Ausgabe der Mutation. Die Mutation hat verwandte Daten für beide Entitätstypen erstellt.
{ "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 } ] } } } }
Verwenden Sie eine GraphQL Abfrage, um alle Bücher in Ihrer Datenbank einschließlich der zugehörigen Kapitel abzurufen.
query { books { items { pages title year chapters { items { name pages } } } } }
Hinweis
An diesem Punkt sollte die Abfrage das einzelne Buch mit zwei Kapiteln zurückgeben.
Beobachten Sie die Ausgabe dieser Abfrage mit einem Array von Büchern, einschließlich ihres geschachtelten Arrays von Kapiteln.
{ "data": { "books": { "items": [ { "pages": 200, "title": "Introduction to Data API builder", "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } ] } } }
Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools erneut eine Verbindung mit der SQL-Datenbank her.
Überprüfen Sie mithilfe einer SQL-Abfrage, ob Ihre Daten erfolgreich erstellt wurden.
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
Hinweis
Diese Abfrage sollte zwei Kapiteldatensätze zurückgeben.