Fermer

octobre 18, 2018

Comment enrichir des données avec MongoDB Stitch –


Cet article a été publié à l'origine sur MongoDB . Merci de soutenir les partenaires qui rendent SitePoint possible.

Voici ce que nous allons réaliser dans ce didacticiel:

Premièrement, nous allons écrire un document pour MongoDB en utilisant MongoDB Stitch .

Le résultat dans notre collection MongoDB ressemblera à ceci:

 {
"_id": ObjectId ("5bb27712dced5f37bebf388c"),
"Titre": "Gardiens de la galaxie"
}

Deuxièmement, un déclencheur saisira cette nouvelle insertion et lancera une fonction.

Enfin, cette fonction appellera l'API externe OMDB avec le titre de film donné, récupérera les données relatives à ce film, et enfin enrichir notre document MongoDB avec les données que nous avons recueillies à partir de cette API.

Voici le résultat final que nous attendons dans notre collection MongoDB:

 {
   "_id": ObjectId ("5bb27712dced5f37bebf388c"),
   "Titre": "Gardiens de la galaxie",
   "Année 2014",
   "Classé": "PG-13",
   "Sortie": "01 août 2014",
   "Runtime": "121 min",
   "Genre": "Action, Aventure, Comédie",
   "Réalisateur": "James Gunn",
   "Écrivain": "James Gunn, Nicole Perlman, Dan Abnett (d'après les bandes dessinées de Marvel de), Andy Lanning (d'après les bandes dessinées de Marvel de), Bill Mantlo (personnage créé par: Rocket Raccoon), Keith Giffen (personnage créé de : Rocket Raccoon), Jim Starlin (personnages créés par: Drax the Destroyer, Gamora et Thanos), Steve Englehart (personnage créé par: Star-Lord), Steve Gan (personnage créé par: Star-Lord), Steve Gerber (personnage créé par: Howard le canard), Val Mayerik (personnage créé par: Howard le canard) ",
   "Acteurs": "Chris Pratt, Zoe Saldana, Dave Bautista, Vin Diesel",
   "Complot": "Un groupe de criminels intergalactiques est obligé de travailler ensemble pour empêcher un guerrier fanatique de prendre le contrôle de l'univers.",
   "Langue: Anglais",
   "Pays": "USA",
   "Awards": "Nominé pour 2 Oscars. Encore 52 victoires et 99 nominations.",
   "Affiche": "https://m.media-amazon.com/images/M/MV5BMTAwMjU5OTgxNjZeQTJeQWpwZ15BbWU4MDUxNDYxODEx._V1_SX300.jpg",
   "Ratings": [  
      {  
         "Source":"Internet Movie Database",
         "Value":"8.1/10"
      },
      {  
         "Source":"Rotten Tomatoes",
         "Value":"91%"
      },
      {  
         "Source":"Metacritic",
         "Value":"76/100"
      }
   ],
   "Métascore": "76",
   "imdbRating": "8.1",
   "imdbVotes": "871 949",
   "imdbID": "tt2015381",
   "Type": "film",
   "DVD": "09 déc 2014",
   "BoxOffice": "270 592 504 $",
   "Production": "Walt Disney Pictures",
   "Site Web": "http://marvel.com/guardians",
   "Réponse": "Vrai"
}

Prérequis

Donc, tout d’abord, si vous voulez essayer cela à la maison, c’est très facile. La seule exigence ici est de créer un cluster gratuit MongoDB Atlas . Cette vidéo vous montrera les étapes.

MongoDB Stitch est notre plate-forme sans serveur, construite par MongoDB au-dessus de MongoDB Atlas. Une fois que notre cluster MongoDB Atlas est prêt, associez-y une application MongoDB Stitch:

  • Cliquez sur le panneau de gauche sur «Applications de point»,

  • puis sur «Créer une nouvelle application»,

  • . Choisissez le nom. vous voulez pour votre application,

  • Liez-le à votre grappe gratuite Atlas MongoDB.

Actions

Pour pouvoir envoyer un document à MongoDB, nous allons utiliser un service HTTP POST.

  • Dans le panneau de gauche, cliquez sur «Services»,
  • . Cliquez ensuite sur “Ajouter un service”,
  • Choisissez un nom de service “IMDB”,

Remarque: “IMDB” sera réutilisé ultérieurement dans le code de fonction. Si vous choisissez un autre nom, veillez à mettre à jour le code en conséquence.

  • Cliquez sur “Ajouter un service”,

  • Cliquez sur “Ajouter un Webhook incoming”,

  • et copiez la capture d'écran ci-dessous.

Lorsque cela est fait, cliquez sur le bouton “Enregistrer” pour afficher l'écran “Editeur de fonctions”.

Saisissez le code suivant:

 exports = function (charge utile, réponse) {
  const mongodb = context.services.get ("mongodb-atlas");
  const movies = mongodb.db ("point"). collection ("films");
  var body = EJSON.parse (payload.body.text ());
  movies.insertOne (body)
  .then (result => {
    response.setStatusCode (201);
  });
};

Cliquez à nouveau sur le bouton “Enregistrer”.

Maintenant que notre service est prêt, nous pouvons le tester!

Allez dans les “Paramètres” et vous trouverez votre URL Webhook. Vous pouvez maintenant envoyer une requête HTTP POST comme celle-ci à MongoDB Stitch:

 curl -H "Content-Type: application / json" -d '{"Titre": "Les gardiens de la galaxie"}' https: // webhooks .mongodb-stitch.com / api / client / v2.0 / app / stitchtapp-abcde / service / IMDB / incoming_webhook / post_movie_title? secret = test

Remarque: j'ai utilisé une commande curl, mais n'hésitez pas à utiliser Postman ou ce que vous avez l'habitude d'utiliser.

Nous pouvons le vérifier en consultant le contenu de la collection «stitch.movies» dans notre atlas MongoDB. Groupe:

Maintenant que nous pouvons insérer un nouveau document dans MongoDB Atlas à l'aide de Stitch, nous allons créer le déclencheur.

  • Dans le panneau de gauche, cliquez sur «Déclencheurs ”,

  • Cliquez ensuite sur“ Ajouter un déclencheur de base de données ”,

  • et procédez comme suit:

C'est le code dont vous aurez besoin pour créer la nouvelle fonction:

 exports = function (changeEvent) {
  var docId = changeEvent.documentKey.  _ id;
  var title = encodeURIComponent (changeEvent.fullDocument.Title.trim ());

  var movies = context.services.get ("mongodb-atlas"). db ("stitch"). collection ("movies");
  var imdb  _url = "http://www.omdbapi.com/?apikey=a12b1234&t=" + titre;

  const http = context.services.get ("IMDB"); // change le nom du service ici si vous avez utilisé un nom différent.
    retourne http
      .get ({url: imdb  _url})
      .then (resp => {
        var doc = EJSON.parse (resp.body.text ());
        movies.updateOne ({" _ id": docId}, doc);
        });
};

Comme vous pouvez le voir au milieu du code, j'utilise l'API OMDB et j'ai remplacé la clé d'API par une fausse.

Vous pouvez créer ici votre propre clé d'API gratuite avec une adresse e-mail valide: http://www.omdbapi.com/apikey.aspx – Limité à 1000 appels par jour.

Une fois cette opération effectuée, vous pouvez simplement remplacer ma fausse clé d'API (surlignée en jaune) par votre own key.

Maintenant que ceci est prêt, il suffit de le tester en répétant la même commande CURL que celle que nous utilisions auparavant. N'hésitez pas à utiliser un autre titre de film si vous en avez un meilleur en tête ;-).

J'ai supprimé le test précédent que nous avions effectué avant d'ajouter le déclencheur et voici ce que j'ai dans ma collection:

Revenons un instant sur ce que nous avons fait:

  • Nous avons inséré un nouveau document utilisant un service HTTP POST hébergé par MongoDB Stitch contenant uniquement un "_id" (rempli automatiquement par MongoDB) et un “Titre”.
  • L'insertion de ce document est détectée par le déclencheur qui appelle une API Web externe utilisant ce “Titre” comme paramètre.
  • Nous analysons ensuite le corps du résultat obtenu de cette API et mettre à jour le document que nous avons inséré il y a quelques millisecondes.

Conclusion

En quelques lignes de code, vous pouvez enrichir les données là où elles se trouvent avec MongoDB Stitch. C'est un excellent moyen de tirer parti de votre architecture de micro-services et de passer finalement à une architecture pilotée par les événements.

Next Steps

Merci d'avoir pris le temps de lire mon message. J'espère que vous l'avez trouvé utile et intéressant.

Si vous envisagez de créer MongoDB Stitch en production, vous pouvez découvrir ici comment fonctionne la facturation .

Si vous souhaitez interroger vos données stockées dans MongoDB Atlas utilisant MongoDB Stitch, je recommande cet article de Michael Lynn .




Source link