Compartir a través de


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.

Prerrequisitos

  • Sql Server y base de datos existentes.
  • CLI para el generador de APIs de datos. Instalación de la CLI
  • Un cliente de base de datos (SQL Server Management Studio, etc.)
    • Si no tiene instalado un cliente, instale SQL Server Management 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 muchos con sus capítulos correspondientes.

  1. Conéctese a la base de datos SQL mediante su cliente o herramienta preferidos.

  2. Cree una tabla denominada Books con las columnas id, title, year y 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. Cree otra tabla denominada Chapters con las columnas id, name y pages. Cree una book_id columna con una relación de clave externa con la id columna de la Books 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
    
  4. 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.

  1. Abra un terminal.

  2. Almacene la cadena de conexión de la base de datos SQL como una variable de shell denominada SQL_CONNECTION_STRING.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Ejecute dab init especificando las siguientes propiedades.

    Importancia
    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
    
  4. Ejecute dab add para agregar una entidad Book que especifique las siguientes propiedades.

    Importancia
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Vuelva a ejecutar dab add para agregar una entidad Chapter y especifique las siguientes propiedades.

    Importancia
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Ejecute dab update para crear la relación Libro a capítulo que especifica las siguientes propiedades.

    Importancia
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Por último, ejecute dab update una última vez para crear la relación capítulo a libro especificando las siguientes propiedades.

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

Ejecución de varias mutaciones de creación

Para concluir, use la CLI de DAB para ejecutar la API y probar el endpoint de GraphQL mediante Banana Cake Pop.

  1. Inicie el motor en tiempo de ejecución mediante la configuración actual.

    dab start
    
  2. Navega a /graphql el punto de conexión relativo de tu 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.

  3. Cree una mutación de GraphQL para crear tres filas distintas en dos tablas de la base de datos. Esta mutación usa tanto las entidades Book como las Chapter en una sola operación de creación múltiple. Use las siguientes propiedades para la mutación.

    Tipo de entidad identificación Nombre Páginas Año
    Libro 1 Introducción al generador de Data API 200 2024
    Capítulo 2 Archivos de configuración 150
    Capítulo 3 Correr 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 el resultado 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
              }
            ]
          }
        }
      }
    }
    
  5. Use una consulta de 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 un solo libro con dos capítulos.

  6. 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
                  }
                ]
              }
            }
          ]
        }
      }
    }
    
  7. Vuelva a conectarse a la base de datos SQL con su cliente o herramienta preferidos.

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