5 façons de faire des requêtes HTTP en Node.js

L’envoi de requêtes HTTP est une fonctionnalité de base des langues modernes et l’une des premières choses que de nombreux devs apprennent. En ce qui concerne Node.js, il existe un grand nombre de solutions à cette problématique, qu’elles soient intégrées de base dans le langage ou créées par la communauté. Examinons quelques-unes des plus populaires.

Nous utiliserons L’API JSON de la NASA Image Astronomique du Jour, parce que l’espace, c’est juste trop cool.

Avant de commencer, assurez-vous que vous avez des versions à jour de Node.js et npm installées sur votre machine.

HTTP – la Bibliothèque Standard

Le module HTTP par défaut de la bibliothèque standard est le premier de notre palmarès.

L’avantage d’utiliser ce module est de ne pas avoir à installer de dépendances externes. L’inconvénient est qu’il n’est pas très convivial par rapport à d’autres solutions.

Le code suivant enverra une demande GET à l’API de la NASA et imprimera l’URL de l’image astronomique du jour ainsi qu’une explication :

const https = require('https');

https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
  let data = '';

  // Un morceau de réponse est reçu
  resp.on('data', (chunk) => {
    data += chunk;
  });

  // La réponse complète à été reçue. On affiche le résultat.
  resp.on('end', () => {
    console.log(JSON.parse(data).explanation);
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});

Une grande partie des fonctionnalités des modules HTTP et HTTPS sont plutôt bas niveau.

On reçoit la réponse par morceaux plutôt que de simplement fournir une fonction de rappel à exécuter dès que toutes les données sont reçues. On doit également analyser les données de réponse manuellement. C’est assez simple si elles sont formatées en JSON comme ici, mais ça reste une étape supplémentaire.

Un autre problème est que ce module ne supporte pas HTTPS par défaut, nous devons donc requérir le module HTTPS à la place si l’API que nous utilisons communique via HTTPS.

En définitive, pour les cas un peu complexes il faudra fournir un effort supplémentaire pour obtenir toutes les données que l’on veut mais c’est une bonne solution si l’on veut éviter d’ajouter des dépendances à son code ou que l’on a besoin des fonctionnalités bas niveau.

Request

Request est un client HTTP simplifié comparable à la bibliothèque Python request. Cette bibliothèque est beaucoup plus conviviale que le module par défaut HTTP et est considérée depuis plusieurs années comme une référence pour la communauté.

Contrairement au module HTTP, vous devrez installer celui-ci en tant que dépendance de npm.

Exécutez ce qui suit dans votre terminal à partir du répertoire dans lequel vous voulez que votre code soit enregistré :

npm install request@2.81.0

Vous verrez qu’il vous faut beaucoup moins de code pour accomplir la même tâche que précédemment :

const request = require('request');

request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body.url);
  console.log(body.explanation);
});

Request est une option parfaite si vous voulez juste une bibliothèque facile à utiliser pour les requêtes HTTP. Si vous souhaitez utiliser les Promises, vous pouvez jeter un œil à la librairie request-promise.

Axios

Axios est un client HTTP basé sur Promise pour le navigateur et pour node.js.

L’utilisation de Promises est bien pratique lorsque le code nécessite un enchaînement d’événements plus complexes. Écrire du code asynchrone peut être source de confusion, et Promises est l’une des nombreuses approches que l’on peut adopter face à cette problématique. Promises est même utilisés dans d’autres langages comme Swift.

Pour installer Axios à partir de npm, entrez la commande suivante dans votre terminal :

npm install axios@0.21.1

Le code suivant accomplira la même tâche d’affichage de l’URL et de l’explication de l’image astronomique du jour :

const axios = require('axios');

axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')
  .then(response => {
    console.log(response.data.url);
    console.log(response.data.explanation);
  })
  .catch(error => {
    console.log(error);
  });

Axios gère même les réponses au format JSON par défaut. Plutôt pratique ! Vous pouvez aussi voir que la gestion des erreurs se fait avec .catch() puisque nous utilisons maintenant les Promises.

Vous pouvez même faire plusieurs requêtes simultanées avec axios.all si vous voulez obtenir l’image astronomique de deux jours différents en même temps par exemple :

var axios = require('axios');

axios.all([
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-03'),
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-02')
]).then(axios.spread((response1, response2) => {
  console.log(response1.data.url);
  console.log(response2.data.url);
})).catch(error => {
  console.log(error);
});

Coder en asynchrone peut facilement devenir complexe et désagréable à gérer, et la façon dont Axios aborde ce problème peut vraiment vous faciliter la vie à long terme.

SuperAgent

Tout comme Axios, SuperAgent est une autre bibliothèque populaire. Utilisée principalement pour effectuer des requêtes AJAX dans le navigateur, elle fonctionne également dans Node.js. Installez SuperAgent avec la commande suivante :

npm install superagent@6.1.0

Ce qui est pas mal avec SuperAgent, c’est les fonctions que l’on peut enchaîner sur des requêtes pour leur ajouter des paramètres, comme par exemple query(). Dans les exemples précédents, nous les avons simplement ajoutés manuellement dans l’URL, mais vous pouvez voir que SuperAgent fournit une fonction pour le faire :

const superagent = require('superagent');

superagent.get('https://api.nasa.gov/planetary/apod')
.query({ api_key: 'DEMO_KEY', date: '2017-08-02' })
.end((err, res) => {
  if (err) { return console.log(err); }
  console.log(res.body.url);
  console.log(res.body.explanation);
});

Tout comme avec Axios, vous n’avez pas à traiter vous-même la réponse en JSON, et ça aussi c’est cool.

Got

Got est une bonne option si vous voulez une bibliothèque plus légère. Elle est également utilisable avec les fonctions Twilio.

Là encore, installez Got avec npm :

npm install got@7.1.0

Tout comme Axios, Got travaille aussi avec les Promises. Le code suivant fera la même chose que dans les autres exemples :

const got = require('got');

got('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }).then(response => {
  console.log(response.body.url);
  console.log(response.body.explanation);
}).catch(error => {
  console.log(error.response.body);
});

Got est parfait si vous voulez une petite bibliothèque qui est moins “lourde” que Request ou équivalent.

Conclusion

Nous n’avons pas couvert tous les cas mais vous connaissez maintenant la base de quelques-unes des bibliothèques HTTP les plus populaires de Node. Il existe également des bibliothèques telles que node-fetch qui porte la fonctionnalité fetch du navigateur vers le backend.

D’autres langages disposent d’une variété similaire de bibliothèques pour répondre à cette problématique. Vous pouvez faire la même chose en Swift, Python et Ruby. Vous pouvez aussi lire nos quickstarts Node.js pour mettre en pratique vos nouvelles compétences.

 

 

Valériane Venance est Developer Evangelist chez Twilio. Laissez lui un message à vvenance@twilio.com ou sur Twitter si vous avez codé un projet cool dont vous voulez discuter!


This content originally appeared on Twilio Blog and was authored by Valeriane Venance

L'envoi de requêtes HTTP est une fonctionnalité de base des langues modernes et l'une des premières choses que de nombreux devs apprennent. En ce qui concerne Node.js, il existe un grand nombre de solutions à cette problématique, qu’elles soient intégrées de base dans le langage ou créées par la communauté. Examinons quelques-unes des plus populaires.

Nous utiliserons L'API JSON de la NASA Image Astronomique du Jour, parce que l'espace, c’est juste trop cool.

Avant de commencer, assurez-vous que vous avez des versions à jour de Node.js et npm installées sur votre machine.

HTTP – la Bibliothèque Standard

Le module HTTP par défaut de la bibliothèque standard est le premier de notre palmarès.

L’avantage d’utiliser ce module est de ne pas avoir à installer de dépendances externes. L'inconvénient est qu'il n'est pas très convivial par rapport à d'autres solutions.

Le code suivant enverra une demande GET à l'API de la NASA et imprimera l'URL de l'image astronomique du jour ainsi qu'une explication :

const https = require('https');

https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
  let data = '';

  // Un morceau de réponse est reçu
  resp.on('data', (chunk) => {
    data += chunk;
  });

  // La réponse complète à été reçue. On affiche le résultat.
  resp.on('end', () => {
    console.log(JSON.parse(data).explanation);
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});

Une grande partie des fonctionnalités des modules HTTP et HTTPS sont plutôt bas niveau.

On reçoit la réponse par morceaux plutôt que de simplement fournir une fonction de rappel à exécuter dès que toutes les données sont reçues. On doit également analyser les données de réponse manuellement. C'est assez simple si elles sont formatées en JSON comme ici, mais ça reste une étape supplémentaire.

Un autre problème est que ce module ne supporte pas HTTPS par défaut, nous devons donc requérir le module HTTPS à la place si l'API que nous utilisons communique via HTTPS.

En définitive, pour les cas un peu complexes il faudra fournir un effort supplémentaire pour obtenir toutes les données que l’on veut mais c’est une bonne solution si l’on veut éviter d’ajouter des dépendances à son code ou que l’on a besoin des fonctionnalités bas niveau.

Request

Request est un client HTTP simplifié comparable à la bibliothèque Python request. Cette bibliothèque est beaucoup plus conviviale que le module par défaut HTTP et est considérée depuis plusieurs années comme une référence pour la communauté.

Contrairement au module HTTP, vous devrez installer celui-ci en tant que dépendance de npm.

Exécutez ce qui suit dans votre terminal à partir du répertoire dans lequel vous voulez que votre code soit enregistré :

npm install request@2.81.0

Vous verrez qu'il vous faut beaucoup moins de code pour accomplir la même tâche que précédemment :

const request = require('request');

request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body.url);
  console.log(body.explanation);
});

Request est une option parfaite si vous voulez juste une bibliothèque facile à utiliser pour les requêtes HTTP. Si vous souhaitez utiliser les Promises, vous pouvez jeter un œil à la librairie request-promise.

Axios

Axios est un client HTTP basé sur Promise pour le navigateur et pour node.js.

L'utilisation de Promises est bien pratique lorsque le code nécessite un enchaînement d'événements plus complexes. Écrire du code asynchrone peut être source de confusion, et Promises est l'une des nombreuses approches que l'on peut adopter face à cette problématique. Promises est même utilisés dans d'autres langages comme Swift.

Pour installer Axios à partir de npm, entrez la commande suivante dans votre terminal :

npm install axios@0.21.1

Le code suivant accomplira la même tâche d’affichage de l'URL et de l'explication de l'image astronomique du jour :

const axios = require('axios');

axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')
  .then(response => {
    console.log(response.data.url);
    console.log(response.data.explanation);
  })
  .catch(error => {
    console.log(error);
  });

Axios gère même les réponses au format JSON par défaut. Plutôt pratique ! Vous pouvez aussi voir que la gestion des erreurs se fait avec .catch() puisque nous utilisons maintenant les Promises.

Vous pouvez même faire plusieurs requêtes simultanées avec axios.all si vous voulez obtenir l'image astronomique de deux jours différents en même temps par exemple :

var axios = require('axios');

axios.all([
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-03'),
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-02')
]).then(axios.spread((response1, response2) => {
  console.log(response1.data.url);
  console.log(response2.data.url);
})).catch(error => {
  console.log(error);
});

Coder en asynchrone peut facilement devenir complexe et désagréable à gérer, et la façon dont Axios aborde ce problème peut vraiment vous faciliter la vie à long terme.

SuperAgent

Tout comme Axios, SuperAgent est une autre bibliothèque populaire. Utilisée principalement pour effectuer des requêtes AJAX dans le navigateur, elle fonctionne également dans Node.js. Installez SuperAgent avec la commande suivante :

npm install superagent@6.1.0

Ce qui est pas mal avec SuperAgent, c'est les fonctions que l'on peut enchaîner sur des requêtes pour leur ajouter des paramètres, comme par exemple query(). Dans les exemples précédents, nous les avons simplement ajoutés manuellement dans l'URL, mais vous pouvez voir que SuperAgent fournit une fonction pour le faire :

const superagent = require('superagent');

superagent.get('https://api.nasa.gov/planetary/apod')
.query({ api_key: 'DEMO_KEY', date: '2017-08-02' })
.end((err, res) => {
  if (err) { return console.log(err); }
  console.log(res.body.url);
  console.log(res.body.explanation);
});

Tout comme avec Axios, vous n'avez pas à traiter vous-même la réponse en JSON, et ça aussi c’est cool.

Got

Got est une bonne option si vous voulez une bibliothèque plus légère. Elle est également utilisable avec les fonctions Twilio.

Là encore, installez Got avec npm :

npm install got@7.1.0

Tout comme Axios, Got travaille aussi avec les Promises. Le code suivant fera la même chose que dans les autres exemples :

const got = require('got');

got('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }).then(response => {
  console.log(response.body.url);
  console.log(response.body.explanation);
}).catch(error => {
  console.log(error.response.body);
});

Got est parfait si vous voulez une petite bibliothèque qui est moins "lourde" que Request ou équivalent.

Conclusion

Nous n’avons pas couvert tous les cas mais vous connaissez maintenant la base de quelques-unes des bibliothèques HTTP les plus populaires de Node. Il existe également des bibliothèques telles que node-fetch qui porte la fonctionnalité fetch du navigateur vers le backend.

D'autres langages disposent d'une variété similaire de bibliothèques pour répondre à cette problématique. Vous pouvez faire la même chose en Swift, Python et Ruby. Vous pouvez aussi lire nos quickstarts Node.js pour mettre en pratique vos nouvelles compétences.

 

 

Valériane Venance est Developer Evangelist chez Twilio. Laissez lui un message à vvenance@twilio.com ou sur Twitter si vous avez codé un projet cool dont vous voulez discuter!


This content originally appeared on Twilio Blog and was authored by Valeriane Venance


Print Share Comment Cite Upload Translate Updates
APA

Valeriane Venance | Sciencx (2021-02-25T01:03:44+00:00) 5 façons de faire des requêtes HTTP en Node.js. Retrieved from https://www.scien.cx/2021/02/25/5-facons-de-faire-des-requetes-http-en-node-js/

MLA
" » 5 façons de faire des requêtes HTTP en Node.js." Valeriane Venance | Sciencx - Thursday February 25, 2021, https://www.scien.cx/2021/02/25/5-facons-de-faire-des-requetes-http-en-node-js/
HARVARD
Valeriane Venance | Sciencx Thursday February 25, 2021 » 5 façons de faire des requêtes HTTP en Node.js., viewed ,<https://www.scien.cx/2021/02/25/5-facons-de-faire-des-requetes-http-en-node-js/>
VANCOUVER
Valeriane Venance | Sciencx - » 5 façons de faire des requêtes HTTP en Node.js. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/02/25/5-facons-de-faire-des-requetes-http-en-node-js/
CHICAGO
" » 5 façons de faire des requêtes HTTP en Node.js." Valeriane Venance | Sciencx - Accessed . https://www.scien.cx/2021/02/25/5-facons-de-faire-des-requetes-http-en-node-js/
IEEE
" » 5 façons de faire des requêtes HTTP en Node.js." Valeriane Venance | Sciencx [Online]. Available: https://www.scien.cx/2021/02/25/5-facons-de-faire-des-requetes-http-en-node-js/. [Accessed: ]
rf:citation
» 5 façons de faire des requêtes HTTP en Node.js | Valeriane Venance | Sciencx | https://www.scien.cx/2021/02/25/5-facons-de-faire-des-requetes-http-en-node-js/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.