Partager via


Mutations multiples dans GraphQL pour le générateur d’API de données

Data API Builder (DAB) prend en charge la combinaison de plusieurs opérations de mutation en une seule transaction. Les mutations multiples prennent en charge les scénarios dans lesquels vous devez créer plusieurs éléments appartenant à la même entité ou créer plusieurs éléments appartenant à une entité associée. Ce guide décrit un exemple de scénario utilisant une opération de mutation multiple.

Prérequis

  • Serveur et base de données SQL existants.
  • INTERFACE CLI du générateur d’API de données. Installer CLI
  • Un client de base de données (SQL Server Management Studio, Azure Data Studio, etc.)

Créer des tables

Commencez par créer deux tables de base pour représenter les livres et leurs chapitres respectifs. Les livres ont une relation un-à-plusieurs avec leurs chapitres correspondants.

  1. Connectez-vous à la base de données SQL à l’aide de votre client ou outil préféré.

  2. Create une table nommée Books avec iddes colonnes , title, yearet 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 une autre table nommée Chapters avec idles colonnes , nameet pages . Create une book_id colonne avec une relation de clé étrangère à la id colonne de la Books table.

    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. Vérifiez que vos tables sont créées avec certaines requêtes SQL courantes.

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

    Notes

    À ce stade, les requêtes ne doivent pas retourner de données.

Fichier de configuration de build

À présent, utilisez l’interface CLI DAB pour créer un fichier de configuration, des entités et des relations d’entité.

  1. Ouvrez un terminal.

  2. Stockez votre base de données SQL chaîne de connexion en tant que variable d’interpréteur de commandes nommée SQL_CONNECTION_STRING.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Exécutez dab init en spécifiant les propriétés suivantes.

    Valeur
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string Utilisez la variable d’interpréteur SQL_CONNECTION_STRING de commandes créée à l’étape précédente.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. Exécutez dab add pour ajouter une entité Book en spécifiant les propriétés suivantes.

    Valeur
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Exécutez dab add à nouveau pour ajouter une entité Chapter en spécifiant maintenant les propriétés suivantes.

    Valeur
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Exécutez dab update pour créer la relation De livre à chapitre en spécifiant les propriétés suivantes.

    Valeur
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Enfin, exécutez dab update une dernière fois pour créer la relation Chapitre à Livre en spécifiant les propriétés suivantes.

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

Exécuter plusieurs mutations de création

Pour conclure, utilisez l’interface CLI DAB pour exécuter l’API et tester le point de terminaison GraphQL à l’aide de Banana Cake Pop.

  1. Démarrez le moteur d’exécution à l’aide de la configuration actuelle.

    dab start
    
  2. Accédez au point de /graphql terminaison relatif de votre application en cours d’exécution. Ce point de terminaison ouvre l’interface Banana Cake Pop.

    Notes

    Par défaut, il s’agit de https://localhost:5001/graphql.

  3. Créez une mutation GraphQL pour créer trois lignes distinctes dans deux tables de votre base de données. Cette mutation utilise les Book entités et Chapter dans une seule opération de « création multiple ». Utilisez les propriétés suivantes pour la mutation.

    Type d'entité id Nom Pages Year
    Book 1 Présentation du générateur d’API de données 200 2024
    Chapitre 2 Fichiers de configuration 150
    Chapitre 3 Exécution en cours 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. Observez la sortie de la mutation. La mutation a créé des données associées pour les deux types d’entités.

    {
      "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. Utilisez une requête GraphQL pour récupérer tous les livres de votre base de données, y compris leurs chapitres associés.

    query {
      books {
        items {
          pages
          title
          year
          chapters {
            items {
              name
              pages
            }
          }
        }
      }
    }
    

    Notes

    À ce stade, la requête doit retourner le livre unique avec deux chapitres.

  6. Observez la sortie de cette requête avec un tableau de livres, y compris leur tableau imbriqué de chapitres.

    {
      "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. Reconnectez-vous à la base de données SQL à l’aide de votre client ou outil préféré.

  8. Vérifiez que vos données ont été correctement créées à l’aide d’une requête 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
    

    Notes

    Cette requête doit retourner deux enregistrements de chapitre.