Várias mutações no GraphQL para o construtor de API de Dados
O DAB (Construtor de API de Dados) dá suporte à combinação de várias operações de mutação em uma única transação. Várias mutações dão suporte a cenários em que você precisa criar vários itens pertencentes à mesma entidade ou criar vários itens pertencentes a uma entidade relacionada. Este guia percorre um cenário de exemplo usando uma operação de várias mutações.
Pré-requisitos
- SqL Server e banco de dados existentes.
- CLI do construtor de API de Dados. Instalar a CLI
- Um cliente de banco de dados (SQL Server Management Studio, Azure Data Studio etc.)
- Se você não tiver um cliente instalado, instale o Azure Data Studio
Criar tabelas
Comece criando duas tabelas básicas para representar livros e seus respectivos capítulos. Os livros têm uma relação um-para-muitos com seus capítulos correspondentes.
Conecte-se ao banco de dados SQL usando seu cliente ou ferramenta preferencial.
Create uma tabela chamada
Books
comid
colunas ,title
,year
epages
.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 outra tabela chamada
Chapters
comid
colunas ,name
epages
. Create umabook_id
coluna com uma relação de chave estrangeira com aid
coluna daBooks
tabela.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
Valide se suas tabelas são criadas com algumas consultas SQL comuns.
SELECT * FROM dbo.Books
SELECT * FROM dbo.Chapters
Observação
Neste ponto, as consultas não devem retornar nenhum dado.
Criar arquivo de configuração
Agora, use a CLI do DAB para criar um arquivo de configuração, entidades e relações de entidade.
Abra um terminal
Armazene o banco de dados SQL cadeia de conexão como uma variável de shell chamada
SQL_CONNECTION_STRING
.SQL_CONNECTION_STRING="<your-sql-connection-string>"
$SQL_CONNECTION_STRING="<your-sql-connection-string>"
Execute
dab init
especificando as propriedades a seguir.Valor database-type
mssql
graphql.multiple-create.enabled
true
host-mode
development
connection-string
Use a variável de SQL_CONNECTION_STRING
shell criada na etapa anterior.dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
Execute
dab add
para adicionar uma entidade Book especificando as propriedades a seguir.Valor source
dbo.Books
permissions
anonymous:*
dab add Book --source "dbo.Books" --permissions "anonymous:*"
Execute
dab add
novamente para adicionar uma entidade chapter agora especificando as propriedades a seguir.Valor source
dbo.Chapters
permissions
anonymous:*
dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"
Execute
dab update
para criar a relação Book to Chapter especificando as propriedades a seguir.Valor relationship
chapters
cardinality
many
dab update Book --relationship chapters --target.entity Chapter --cardinality many
Por fim, execute
dab update
uma última vez para criar a relação Capítulo para Livro especificando as propriedades a seguir.Valor relationship
book
cardinality
one
dab update Chapter --relationship book --target.entity Book --cardinality one
Executar várias mutações de criação
Para encapsular as coisas, use a CLI do DAB para executar a API e testar o ponto de extremidade GraphQL usando o Banana Cake Pop.
Inicie o mecanismo de runtime usando a configuração atual.
dab start
Navegue até o
/graphql
ponto de extremidade relativo do aplicativo em execução. Esse ponto de extremidade abre a interface Pop do Banana Cake.Observação
Por padrão, isso seria
https://localhost:5001/graphql
.Crie uma mutação GraphQL para criar três linhas distintas em duas tabelas no banco de dados. Essa mutação usa as
Book
entidades eChapter
em uma única operação de "criação múltipla". Use as propriedades a seguir para a mutação.Tipo de entidade ID Nome Pages (Páginas) Year Livro 1 Introdução ao construtor de API de Dados 200 2024 Capítulo 2 Arquivos de configuração 150 Capítulo 3 Executando 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 a saída da mutação. A mutação criou dados relacionados para ambos os tipos de entidade.
{ "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 uma consulta GraphQL para recuperar todos os livros no banco de dados, incluindo os capítulos relacionados.
query { books { items { pages title year chapters { items { name pages } } } } }
Observação
Neste ponto, a consulta deve retornar o único livro com dois capítulos.
Observe a saída dessa consulta com uma matriz de livros, incluindo sua matriz aninhada 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 } ] } } ] } } }
Conecte-se ao banco de dados SQL novamente usando seu cliente ou ferramenta preferencial.
Valide se seus dados foram criados com êxito usando uma 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
Observação
Essa consulta deve retornar dois registros de capítulo.