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.

Requisitos previos

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 varios con sus capítulos correspondientes.

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

  2. Create una tabla denominada Books con idcolumnas , title, yeary 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 otra tabla denominada Chapters con idlas columnas , namey pages . Create 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 base de datos SQL cadena de conexión 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.

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

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

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

    Valor
    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 que especifica las siguientes propiedades.

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

Ejecución de varias mutaciones de creación

Para ajustar las cosas, use la CLI de DAB para ejecutar la API y probar el punto de conexión de GraphQL mediante Banana Cake Pop.

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

    dab start
    
  2. Vaya al /graphql punto de conexión relativo de la 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 las Book entidades y Chapter en una sola operación de creación múltiple. Use las siguientes propiedades para la mutación.

    Tipo de entidad ID Nombre Páginas Year
    Book 1 Introducción al generador de Data API 200 2024
    Capítulo 2 Archivos de configuración 150
    Capítulo 3 En ejecución 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 la salida 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 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 el libro único 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.