Compartilhar via


Várias mutações no Construtor de API de Dados do GraphQL

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 mutação múltipla.

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, etc.)
    • Se você não tiver um cliente instalado, instale o SQL Server Management 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.

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

  2. Crie uma tabela nomeada Books comid, , titleyeare pages colunas.

    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. Crie outra tabela nomeada Chapters com id, namee pages colunas. Crie uma coluna book_id com uma relação de chave estrangeira para a coluna id da tabela Books.

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

Arquivo de configuração de build

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 a cadeia de conexão do banco de dados SQL 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 shell SQL_CONNECTION_STRING 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 Livro a Capítulo 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 a 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 concluir, use a CLI do DAB para executar a API e testar o ponto de extremidade do GraphQL usando 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 endpoint abre a interface Banana Cake Pop.

    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 em seu banco de dados. Esta mutação usa as entidades Book 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 Páginas Ano
    Livro 1 Introdução ao construtor de API de Dados 200 2024
    Capítulo 2 Arquivos de configuração 150
    Capítulo 3 Correndo 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 em seu banco de dados, incluindo seus 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 os 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.