Compartilhar via


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.)

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.

  1. Conecte-se ao banco de dados SQL usando seu cliente ou ferramenta preferencial.

  2. Create uma tabela chamada Books com idcolunas , title, yeare pages .

    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
    
  3. Create outra tabela chamada Chapters com idcolunas , namee pages . Create uma book_id coluna com uma relação de chave estrangeira com a id coluna da Books 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
    
  4. 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.

  1. Abra um terminal

  2. 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>"
    
  3. 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
    
  4. 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:*"
    
  5. 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:*"  
    
  6. 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
    
  7. 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.

  1. Inicie o mecanismo de runtime usando a configuração atual.

    dab start
    
  2. 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.

  3. 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 e Chapter 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
          }
        }
      }
    }
    
  4. 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
              }
            ]
          }
        }
      }
    }
    
  5. 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.

  6. 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
                  }
                ]
              }
            }
          ]
        }
      }
    }
    
  7. Conecte-se ao banco de dados SQL novamente usando seu cliente ou ferramenta preferencial.

  8. 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.