Comment configurer un schéma AWS AppSync pour gérer les données JSON imbriquées dans DynamoDB ?

Dernière mise à jour : 11-01-2021

Je souhaite que mon schéma AWS AppSync récupère la réponse dans une table Amazon DynamoDB contenant des données JSON imbriquées. Comment dois-je procéder ?

Brève description

Pour obtenir un schéma AWS AppSync permettant de gérer les données JSON imbriquées dans DynamoDB, procédez comme suit :

  • Ajoutez un élément de données JSON imbriqué à la table DynamoDB.
  • Créez une API AppSync et associez-y la source de données.
  • Configurez le schéma JSON imbriqué dans l'API AppSync.
  • Associez un résolveur à la requête getItems.
  • Créez une nouvelle requête de test.

Important : le schéma AWS AppSync transmet les valeurs null contenues dans sa réponse à DynamoDB si les noms des champs ne sont pas mappés avec les données JSON imbriquées.

Solution

Ajouter un élément de données JSON imbriqué à la table DynamoDB

1.    Ouvrez la console AWS DynamoDB.

2.    Sélectionnez Créer une table.

3.    Dans le champ Nom de la table, entrez un nom descriptif.

4.    Dans le champ Clé primaire, entrez un nom de champ. Par exemple : id.

5.    Sélectionnez Créer.

6.    Sélectionnez l'onglet Éléments, puis Créer un élément.

7.    Dans la liste déroulante située en haut à gauche de la boîte de dialogue Créer un élément, sélectionnez Texte.

Remarque : Arborescence est la sélection par défaut pour la liste déroulante.

8.    Copiez et collez l'enregistrement JSON imbriqué suivant dans l'élément de texte, et sélectionnez Enregistrer :

Important : veillez à remplacer le contenu prérempli de la zone de texte par l'enregistrement JSON imbriqué.

Exemple d'enregistrement JSON imbriqué

{
    "id": "123",
    "product": {
        "model": {
            "property": {
                "battery": "li-ion",
                "device": "iOT-Device",
                "pressure": "1012",
                "up_time": "02:12:34"
            }
        }
    },
    "status": "In-Stock"
}

Remarque : pour plus d'informations, consultez Créer une table.

Créer une API AppSync et y associer la source de données

1.    Ouvrez la console AWS AppSync.

2.    Sélectionnez Create API (Créer une API).

3.    Sur la page Mise en route, sous Personnaliser votre API ou importer depuis Amazon DynamoDB, sélectionnez Créer à partir de zéro.

4.    Sélectionnez Démarrer.

5.    Dans le champ Nom de l'API, entrez un nom pour votre API.

6.    Sélectionnez Créer.

7.    Dans le volet de navigation de gauche, sélectionnez Sources de données.

8.    Sélectionnez Créer une source de données.

9.    Sur la page Nouvelle source de données, sous Créer une nouvelle source de données, sélectionnez les options suivantes : Dans le champ Nom de la source de données, entrez un nom descriptif. Dans le champ Type de source de données, sélectionnez Table Amazon DynamoDB. Dans le champ Région, sélectionnez la région qui contient votre table DynamoDB. Dans le champ Nom de la table, sélectionnez la table que vous venez de créer.

Important : pour toutes les autres options, conservez les paramètres par défaut.

10.    Sélectionnez Créer.

Remarque : pour plus d'informations, consultez Association d'une source de données.

Configurer le schéma JSON imbriqué dans l'API AppSync

1.    Dans le volet de navigation de gauche de la console AWS AppSync, sélectionnez Schéma.

2.    Copiez et collez le schéma JSON imbriqué suivant dans la zone de texte, et sélectionnez Enregistrer le schéma :

Important : veillez à remplacer le contenu prérempli de la zone de texte par le schéma JSON imbriqué.

Exemple de schéma JSON imbriqué

type Query {
    getItems(id: String!): allData
}

type allData {
    id: String!
    product: toModel
    status: String
}

type items {
    battery: String
    device: String
    pressure: String
    up_time: String
}

schema {
    query: Query
}

type toModel {
    model: toProperties
}

type toProperties {
    property: items
}

Remarque : pour plus d'informations, consultez Conception de votre schéma.

Associer un résolveur à la requête getItems

1.    Dans la console AWS AppSync, sur la page Schéma de votre API, sous Résolveurs, faites défiler l'écran jusqu'à Requête. Ou dans le champ Types de filtre, entrez Requête.

2.    En regard de getItems(...): allData, sous Résolveur, sélectionnez Associer.

3.    Sur la page Créer un nouveau résolveur, dans le champ Nom de la source de données, sélectionnez le nom de la table DynamoDB que vous avez créée précédemment.

Important : ne modifiez pas les modèles de mappage par défaut pour l'opération getItem de DynamoDB.

4.    Sélectionnez Enregistrer les résolveurs.

Exemple de modèle de mappage de requêtes

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "ID": $util.dynamodb.toDynamoDBJson($ctx.args.ID),
    }
}

Exemple de modèle de mappage de réponses

$util.toJson($ctx.result)

Remarque : pour plus d'informations, consultez Configuration des résolveurs.

Créer une nouvelle requête de test

1.    Dans la console AWS AppSync, dans le volet de navigation de gauche, sélectionnez Requêtes.

2.    Sur la page Requêtes de votre API, dans l'éditeur de requêtes, copiez et collez la requête suivante :

Exemple de requête de test

query getItem {
    getItems(id:"123") {
      id
      product{
          model{
            property{
            pressure 
            device
            battery
            up_time
          }
        }
      }
      status
    }
  }

3.    Choisissez l'icône de lecture ou appuyez sur Ctrl/Cmd + Entrée pour exécuter la requête de test.

Remarque : la requête de test doit renvoyer les résultats suivants :

Exemple de résultats de la requête de test

{
  "data": {
    "getItems": {
      "id": "123",
      "product": {
        "model": {
          "property": {
            "pressure": "1012",
            "device": "iOT-Device",
            "battery": "li-ion",
            "up_time": "02:12:34"
          }
        }
      },
      "status": "In-Stock"
    }
  }
}

Vous pouvez ainsi récupérer l'ensemble des données JSON imbriquées d'une table Amazon DynamoDB via des opérations AppSync GraphQL.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?