Varias mutaciones en GraphQL for Data API Builder
Data API Builder (DAB) admite la combinación de varias operaciones de mutación en una sola transacción. Varias mutaciones admiten escenarios en los que es necesario crear varios elementos que pertenecen a la misma entidad o crear varios elementos que pertenecen a una entidad relacionada. En esta guía se explica un escenario de ejemplo mediante una operación de mutación múltiple.
Requisitos previos
- Base de datos y servidor SQL existente.
- CLI del generador de API de datos. Instalación de la CLI de Azure
- Un cliente de base de datos (SQL Server Management Studio, Azure Data Studio, etc.)
- Si no tiene instalado un cliente, instale Azure Data Studio.
Creación de tablas
Empiece por crear dos tablas básicas para representar libros y sus respectivos capítulos. Los libros tienen una relación uno a varios con sus capítulos correspondientes.
Conéctese a la base de datos SQL mediante su cliente o herramienta preferidos.
Create una tabla denominada
Books
conid
columnas ,title
,year
ypages
.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 otra tabla denominada
Chapters
conid
las columnas ,name
ypages
. Create unabook_id
columna con una relación de clave externa con laid
columna de laBooks
tabla.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
Compruebe que las tablas se crean con algunas consultas SQL comunes.
SELECT * FROM dbo.Books
SELECT * FROM dbo.Chapters
Nota
En este momento, las consultas no deben devolver ningún dato.
Archivo de configuración de compilación
Ahora, use la CLI de DAB para crear un archivo de configuración, entidades y relaciones de entidad.
Abra un terminal.
Almacene la base de datos SQL cadena de conexión como una variable de shell denominada
SQL_CONNECTION_STRING
.SQL_CONNECTION_STRING="<your-sql-connection-string>"
$SQL_CONNECTION_STRING="<your-sql-connection-string>"
Ejecute
dab init
especificando las siguientes propiedades.Valor database-type
mssql
graphql.multiple-create.enabled
true
host-mode
development
connection-string
Use la SQL_CONNECTION_STRING
variable de shell creada en el paso anterior.dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
Ejecute
dab add
para agregar una entidad Book que especifique las siguientes propiedades.Valor source
dbo.Books
permissions
anonymous:*
dab add Book --source "dbo.Books" --permissions "anonymous:*"
Vuelva a ejecutar
dab add
para agregar una entidad Chapter y especifique las siguientes propiedades.Valor source
dbo.Chapters
permissions
anonymous:*
dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"
Ejecute
dab update
para crear la relación Libro a capítulo que especifica las siguientes propiedades.Valor relationship
chapters
cardinality
many
dab update Book --relationship chapters --target.entity Chapter --cardinality many
Por último, ejecute
dab update
una última vez para crear la relación Capítulo a libro que especifica las siguientes propiedades.Valor relationship
book
cardinality
one
dab update Chapter --relationship book --target.entity Book --cardinality one
Ejecución de varias mutaciones de creación
Para ajustar las cosas, use la CLI de DAB para ejecutar la API y probar el punto de conexión de GraphQL mediante Banana Cake Pop.
Inicie el motor en tiempo de ejecución mediante la configuración actual.
dab start
Vaya al
/graphql
punto de conexión relativo de la aplicación en ejecución. Este punto de conexión abre la interfaz Banana Cake Pop.Nota
De forma predeterminada, sería
https://localhost:5001/graphql
.Cree una mutación de GraphQL para crear tres filas distintas en dos tablas de la base de datos. Esta mutación usa las
Book
entidades yChapter
en una sola operación de creación múltiple. Use las siguientes propiedades para la mutación.Tipo de entidad ID Nombre Páginas Year Book 1 Introducción al generador de Data API 200 2024 Capítulo 2 Archivos de configuración 150 Capítulo 3 En ejecució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 } } } }
Observe la salida de la mutación. La mutación creó datos relacionados para ambos tipos de entidad.
{ "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 } ] } } } }
Use una consulta graphQL para recuperar todos los libros de la base de datos, incluidos sus capítulos relacionados.
query { books { items { pages title year chapters { items { name pages } } } } }
Nota
En este momento, la consulta debe devolver el libro único con dos capítulos.
Observe la salida de esta consulta con una matriz de libros, incluida su matriz anidada de capítulos.
{ "data": { "books": { "items": [ { "pages": 200, "title": "Introduction to Data API builder", "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } ] } } }
Vuelva a conectarse a la base de datos SQL con su cliente o herramienta preferidos.
Compruebe que los datos se crearon correctamente mediante una consulta 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
Nota
Esta consulta debe devolver dos registros de capítulos.