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

Date de la dernière mise à jour : 03/03/2022

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ées à la table DynamoDB.
  • Créez une API AWS AppSync et y associer la source de données.
  • Configurez le schéma JSON imbriqué dans l'API AWS 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.

Résolution

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

1.    Ouvrez la console Amazon DynamoDB.

2.    Choisissez Create table (Créer une table).

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

4.    Dans le champ Partition key (Clé de partition), saisissez un nom de champ. Par exemple : id.

5.    Choisissez Create table (Créer une table). La nouvelle table apparaît sur la page Tables de la console.

6.    Dans la colonne Name (Nom), choisissez le nom de la nouvelle table. La page Overview (Aperçu) da la table s'ouvre.

7.    Sélectionnez la liste déroulante Actions. Ensuite, choisissez Create item (Créer un élément) La page Create item (Créer un élément) s'ouvre.

8.    Cliquez sur le bouton JSON.

9.    Copiez et collez l'enregistrement JSON imbriqué suivant dans l'éditeur JSON, puis choisissez Save (Enregistrer) :

Important : assurez-vous de remplacer le contenu prérempli dans l'éditeur JSON 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"
}

Pour plus d'informations, consultez Créer une table.

Créer une API AWS 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.    Choisissez Create (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 New Data Source (Nouvelle source de données), sous Create new Data Source (Créer une nouvelle source de données), choisissez les options suivantes :
Pour Data source name (Nom de la source de données), saisissez un nom descriptif.
Dans le champ Data source type (Type de source de données), choisissez Table Amazon DynamoDB.
Dans le champ Region (Région), choisissez la région qui contient votre table DynamoDB.
Dans le champ Table name (Nom de la table), choisissez la table que vous venez de créer.

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

10.    Choisissez Create (Créer).

Pour plus d'informations, consultez Attachement d'une source de données.

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

1.    Ouvrez la console AWS AppSync.

2.    Dans le panneau de navigation de gauche, choisissez Schema (Schéma).

3.    Copiez et collez le schéma JSON imbriqué suivant dans l'éditeur JSON, puis choisissez Save Schema (Enregistrer le schéma) :

Important : assurez-vous de remplacer le contenu prérempli dans l'éditeur JSON 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
}

Pour plus d'informations, consultez Conception de votre schéma.

Associer un résolveur à la requête getItems

1.    Ouvrez la console AWS AppSync.

2.    Sur la page Schema (Schéma) de votre API, sous Resolvers (Résolveurs), faites défiler jusqu'à Query (Requête).
Remarque : vous pouvez également saisir Query (Requête) dans le champ Filter types (Types de filtres).

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

4.    Sur la page Create new Resolver (Créer un nouveau résolveur), dans le champ Data source name (Nom de la source de données), choisissez le nom de la table DynamoDB que vous avez créée.

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

5.    Choisissez Save Resolvers (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)

Pour plus d'informations, consultez Configuration des résolveurs.

Créer une requête de test

1.    Ouvrez la console AWS AppSync.

2.    Dans le panneau de navigation de gauche, choisissez Queries (Requêtes).

3.    Sur la page Queries (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
    }
  }

4.    Pour exécuter la requête de test, choisissez l'icône de lecture ou appuyez sur Ctrl/Cmd + Entrée.

Exemple de résultats de 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 désormais récupérer toute donnée JSON imbriquée d'une table Amazon DynamoDB via des opérations AWS AppSync GraphQL.


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


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