Partager via


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

Le générateur d’API de données (DAB) prend en charge la combinaison de plusieurs opérations de mutation en une seule transaction. Plusieurs mutations 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 à l’aide d’une opération de mutation multiple.

Conditions préalables

  • Serveur SQL existant et base de données.
  • CLI du générateur d'API de données. Installer l’interface CLI
  • Un client de base de données (SQL Server Management Studio, etc.)
    • Si aucun client n’est installé, installez SQL Server Management Studio.

Créer des tables

Commencez par créer deux tables de base pour représenter des 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. Créez une table nommée Books avec id, title, yearet pages des colonnes.

    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. Créez une autre table nommée Chapters avec id, nameet pages des colonnes. Créez 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
    

    Remarque

    À 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 chaîne de connexion de base de données SQL sous la forme d’une variable shell 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 SQL_CONNECTION_STRING variable shell 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 spécifiant les propriétés suivantes.

    Valeur
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Réexécutez dab add 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 Book to Chapter 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 la CLI DAB pour exécuter l'API et tester le point de terminaison GraphQL avec Banana Cake Pop.

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

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

    Remarque

    Par défaut, ce serait https://localhost:5001/graphql.

  3. Créez une mutation GraphQL pour créer trois lignes distinctes sur deux tables de votre base de données. Cette mutation utilise à la fois les entités Book 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 Feuilles Année
    Livre 1 Présentation du générateur d’API de données 200 2024
    Chapitre 2 Fichiers de configuration 150
    Chapitre 3 Course à pied 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 le résultat 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 connexes.

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

    Remarque

    À ce stade, la requête doit retourner un seul livre 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. Connectez-vous à nouveau à 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
    

    Remarque

    Cette requête doit retourner deux enregistrements de chapitre.