Mutations multiples dans GraphQL pour le générateur d’API de données
Data API Builder (DAB) prend en charge la combinaison de plusieurs opérations de mutation en une seule transaction. Les mutations multiples prennent en charge les scénarios dans lesquels vous devez créer plusieurs éléments appartenant à la même entité ou créer plusieurs éléments appartenant à une entité associée. Ce guide décrit un exemple de scénario utilisant une opération de mutation multiple.
Prérequis
- Serveur et base de données SQL existants.
- INTERFACE CLI du générateur d’API de données. Installer CLI
- Un client de base de données (SQL Server Management Studio, Azure Data Studio, etc.)
- Si aucun client n’est installé, installez Azure Data Studio
Créer des tables
Commencez par créer deux tables de base pour représenter les livres et leurs chapitres respectifs. Les livres ont une relation un-à-plusieurs avec leurs chapitres correspondants.
Connectez-vous à la base de données SQL à l’aide de votre client ou outil préféré.
Create une table nommée
Books
avecid
des colonnes ,title
,year
etpages
.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 une autre table nommée
Chapters
avecid
les colonnes ,name
etpages
. Create unebook_id
colonne avec une relation de clé étrangère à laid
colonne de laBooks
table.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
Vérifiez que vos tables sont créées avec certaines requêtes SQL courantes.
SELECT * FROM dbo.Books
SELECT * FROM dbo.Chapters
Notes
À ce stade, les requêtes ne doivent pas retourner de données.
Fichier de configuration de build
À présent, utilisez l’interface CLI DAB pour créer un fichier de configuration, des entités et des relations d’entité.
Ouvrez un terminal.
Stockez votre base de données SQL chaîne de connexion en tant que variable d’interpréteur de commandes nommée
SQL_CONNECTION_STRING
.SQL_CONNECTION_STRING="<your-sql-connection-string>"
$SQL_CONNECTION_STRING="<your-sql-connection-string>"
Exécutez
dab init
en spécifiant les propriétés suivantes.Valeur database-type
mssql
graphql.multiple-create.enabled
true
host-mode
development
connection-string
Utilisez la variable d’interpréteur SQL_CONNECTION_STRING
de commandes créée à l’étape précédente.dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
Exécutez
dab add
pour ajouter une entité Book en spécifiant les propriétés suivantes.Valeur source
dbo.Books
permissions
anonymous:*
dab add Book --source "dbo.Books" --permissions "anonymous:*"
Exécutez
dab add
à nouveau pour ajouter une entité Chapter en spécifiant maintenant les propriétés suivantes.Valeur source
dbo.Chapters
permissions
anonymous:*
dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"
Exécutez
dab update
pour créer la relation De livre à chapitre en spécifiant les propriétés suivantes.Valeur relationship
chapters
cardinality
many
dab update Book --relationship chapters --target.entity Chapter --cardinality many
Enfin, exécutez
dab update
une dernière fois pour créer la relation Chapitre à Livre en spécifiant les propriétés suivantes.Valeur relationship
book
cardinality
one
dab update Chapter --relationship book --target.entity Book --cardinality one
Exécuter plusieurs mutations de création
Pour conclure, utilisez l’interface CLI DAB pour exécuter l’API et tester le point de terminaison GraphQL à l’aide de Banana Cake Pop.
Démarrez le moteur d’exécution à l’aide de la configuration actuelle.
dab start
Accédez au point de
/graphql
terminaison relatif de votre application en cours d’exécution. Ce point de terminaison ouvre l’interface Banana Cake Pop.Notes
Par défaut, il s’agit de
https://localhost:5001/graphql
.Créez une mutation GraphQL pour créer trois lignes distinctes dans deux tables de votre base de données. Cette mutation utilise les
Book
entités etChapter
dans une seule opération de « création multiple ». Utilisez les propriétés suivantes pour la mutation.Type d'entité id Nom Pages Year Book 1 Présentation du générateur d’API de données 200 2024 Chapitre 2 Fichiers de configuration 150 Chapitre 3 Exécution en cours 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 } } } }
Observez la sortie de la mutation. La mutation a créé des données associées pour les deux types d’entités.
{ "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 } ] } } } }
Utilisez une requête GraphQL pour récupérer tous les livres de votre base de données, y compris leurs chapitres associés.
query { books { items { pages title year chapters { items { name pages } } } } }
Notes
À ce stade, la requête doit retourner le livre unique avec deux chapitres.
Observez la sortie de cette requête avec un tableau de livres, y compris leur tableau imbriqué de chapitres.
{ "data": { "books": { "items": [ { "pages": 200, "title": "Introduction to Data API builder", "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } ] } } }
Reconnectez-vous à la base de données SQL à l’aide de votre client ou outil préféré.
Vérifiez que vos données ont été correctement créées à l’aide d’une requête 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
Notes
Cette requête doit retourner deux enregistrements de chapitre.