Partilhar via


Múltiplas mutações no GraphQL for Data API builder

O construtor de API de dados (DAB) suporta a combinação de várias operações de mutação em uma única transação. Várias mutações suportam 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

  • Servidor SQL e banco de dados existentes.
  • CLI do construtor de API de dados. Instalar a CLI
  • Um cliente de base de dados (SQL Server Management Studio, etc.)
    • Se 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 respetivos capítulos. Os livros têm uma relação um-para-muitos com os capítulos correspondentes.

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

  2. Crie uma tabela nomeada Books com id, title, yeare 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 book_id coluna com uma relação de chave estrangeira com a id coluna 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 foram criadas com algumas consultas SQL comuns.

    SELECT * FROM dbo.Books
    
    SELECT * FROM dbo.Chapters
    

    Observação

    Neste ponto, as consultas não devem devolver quaisquer dados.

Compilar arquivo de configuração

Agora, use o CLI do DAB para criar um ficheiro de configuração, entidades e relações entre entidades.

  1. Abra um terminal

  2. Armazene sua 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 seguintes propriedades.

    Valor
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string Use a SQL_CONNECTION_STRING variável 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 seguintes propriedades.

    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 seguintes propriedades.

    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 seguintes propriedades.

    Valor
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Finalmente, execute dab update uma última vez para criar a relação Chapter to Book especificando as seguintes propriedades.

    Valor
    relationship book
    cardinality one
    dab update Chapter --relationship book --target.entity Book --cardinality one
    

Executar múltiplas mutações de criação

Para concluir as coisas, use a CLI DAB para executar a API e testar o ponto de extremidade GraphQL usando o Banana Cake Pop.

  1. Inicie o motor de execução usando a configuração atual.

    dab start
    
  2. Navegue até o /graphql ponto de extremidade relativo do seu aplicativo em execução. Este ponto de extremidade abre a interface do Banana Cake Pop.

    Observação

    Por defeito, este ponto final 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 tanto as entidades Book como as Chapter numa única operação de "criação múltipla". Empregue as seguintes propriedades 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 Corrida 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 livro único com dois capítulos.

  6. Observe a saída desta 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 preferido.

  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.