Client HTTP pour JavaScript (Node.js) : top bibliothèques pour travailler avec le réseau
Le développement moderne sur Node.js se passe rarement d'interactions avec des services externes. Qu'il s'agisse d'API REST, d'endpoints GraphQL ou de streaming de données — vous aurez besoin d'un client HTTP fiable. Dans cet article, nous analyserons les meilleures bibliothèques pour effectuer des requêtes HTTP dans l'environnement Node.js, leurs caractéristiques et des exemples d'utilisation.
1. Axios — un choix universel
Axios est le client HTTP le plus populaire pour Node.js et les navigateurs. Il est basé sur les promesses, prend en charge les intercepteurs (interceptors), la transformation automatique du JSON et l'annulation des requêtes.
Installation
npm install axiosExemple de requête GET
const axios = require('axios');
async function getUsers() { try { const response = await axios.get('https://jsonplaceholder.typicode.com/users'); console.log(response.data); } catch (error) { console.error('Erreur :', error.message); }}
getUsers();Caractéristiques :
- Prise en charge de
CancelTokenpour annuler les requêtes - Gestion automatique des erreurs HTTP (statuts 4xx et 5xx)
- Fonctionne à la fois côté serveur et dans le navigateur
- Prise en charge de la progression du téléchargement/téléversement
2. Got — performance et flexibilité
Got est une bibliothèque légère et rapide, créée spécialement pour Node.js. Elle offre une API riche et d'excellentes performances grâce à l'utilisation directe des modules http et https.
Installation
npm install gotExemple de requête POST
const got = require('got');
async function createPost() { try { const response = await got.post('https://jsonplaceholder.typicode.com/posts', { json: { title: 'Nouveau post', body: 'Contenu du post', userId: 1 }, responseType: 'json' }); console.log(response.body); } catch (error) { console.error('Erreur :', error.message); }}
createPost();Caractéristiques :
- Prise en charge des flux et de la pagination
- Prise en charge intégrée des tentatives répétées (retry)
- Gestion des cookies et du cache
- Prise en charge de HTTP/2 (via
http2-wrapper)
3. Node.js Fetch API — le standard natif
Depuis Node.js 18, Fetch API est devenu un module intégré (disponible globalement). Il s'agit d'une implémentation de la même API que dans les navigateurs, ce qui simplifie le code universel.
Exemple d'utilisation
async function fetchData() { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts/1'); if (!response.ok) throw new Error('Erreur HTTP : ' + response.status); const data = await response.json(); console.log(data); } catch (error) { console.error('Erreur :', error.message); }}
fetchData();Caractéristiques :
- Ne nécessite pas d'installation — intégré dans Node.js 18+
- API standard, familière aux développeurs frontend
- Prise en charge de
AbortControllerpour annuler les requêtes - Capacités limitées par rapport à Axios/Got (par exemple, pas d'intercepteurs)
4. undici — client HTTP/1.1 haute performance
undici est un client HTTP rapide et moderne, qui est à la base du Fetch intégré dans Node.js. Il est optimisé pour un débit maximal.
Installation
npm install undiciExemple de requête
const { request } = require('undici');
async function fetchWithUndici() { try { const { statusCode, body } = await request('https://jsonplaceholder.typicode.com/users'); const data = await body.json(); console.log('Statut :', statusCode); console.log('Données :', data); } catch (error) { console.error('Erreur :', error.message); }}
fetchWithUndici();Caractéristiques :
- Très haute performance et faible latence
- Prise en charge des connexions persistantes (keep-alive)
- Utilisé en interne par Node.js pour Fetch
- API de bas niveau pour un contrôle maximal
5. node-fetch — le classique pour les anciennes versions
node-fetch est une bibliothèque qui implémente le Fetch API du navigateur pour Node.js. Elle était très populaire avant l'ajout du Fetch natif dans Node.js 18.
Installation
npm install node-fetchExemple d'utilisation
const fetch = require('node-fetch');
async function getPost() { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts/1'); const data = await response.json(); console.log(data); } catch (error) { console.error('Erreur :', error.message); }}
getPost();Caractéristiques :
- API familière aux développeurs frontend
- Nécessite une installation séparée pour Node.js < 18
- Prise en charge des flux et des cookies
- Moins performant que undici ou Got
Tableau comparatif
| Bibliothèque | Popularité (npm) | Performance | Intercepteurs | Flux | HTTP/2 | Annulation |
|---|---|---|---|---|---|---|
| Axios | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ | ✅ | ❌ | ✅ |
| Got | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✅ | ✅ | ✅ | ✅ |
| Fetch (natif) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ❌ | ✅ | ❌ | ✅ |
| undici | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ | ✅ | ❌ | ✅ |
| node-fetch | ⭐⭐⭐⭐ | ⭐⭐⭐ | ❌ | ✅ | ❌ | ✅ |
Comment choisir un client HTTP ?
Le choix de la bibliothèque dépend de vos besoins :
- Pour les projets universels (navigateur + serveur) — choisissez Axios
- Pour une performance maximale sur Node.js — Got ou undici
- Pour les nouveaux projets sur Node.js 18+ — utilisez le Fetch natif
- Pour les projets hérités — node-fetch ou request (obsolète)
Chaque bibliothèque a ses forces et ses faiblesses. Axios reste le choix le plus polyvalent, Got offre la meilleure performance, et le Fetch natif est idéal pour les nouveaux projets. undici est parfait pour les tâches nécessitant une vitesse maximale. Analysez vos besoins et choisissez l'outil adapté à votre projet !