Chapitre 18 – Requêtes HTTP et APIs
JavaScript permet d'interagir avec des serveurs distants en envoyant des requêtes HTTP. Ces requêtes sont essentielles pour récupérer des données, envoyer des formulaires, ou interagir avec des services distants appelés APIs (Interfaces de Programmation Applicative).
Zone de démonstration interactive
Récupère les données d'un utilisateur depuis JSONPlaceholder API
Crée un nouveau post sur JSONPlaceholder API
Modifie un post existant sur JSONPlaceholder API
Supprime un post sur JSONPlaceholder API
1. L'objet fetch
fetch est une méthode moderne et native permettant d'effectuer des requêtes réseau de façon asynchrone. Elle retourne une promesse qui se résout avec la réponse du serveur.
fetch('https://api.exemple.com/data')
.then(response => {
if (!response.ok) {
throw new Error(`Erreur HTTP: ${response.status}`);
}
return response.json();
})
.then(data => console.log(data))
.catch(error => console.error('Erreur :', error));
Version avec async/await :
async function fetchData() {
try {
const response = await fetch('https://api.exemple.com/data');
if (!response.ok) {
throw new Error(`Erreur HTTP: ${response.status}`);
}
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Erreur:', error);
}
}
2. Requêtes GET, POST, PUT, DELETE
GET Récupérer des données
Utilisée pour récupérer des données depuis le serveur.
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(response => response.json())
.then(data => console.log(data));
POST Envoyer des données
Utilisée pour envoyer des données (création).
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Nouveau post',
body: 'Contenu du post',
userId: 1
})
})
.then(response => response.json())
.then(data => console.log(data));
PUT Modifier une ressource
Utilisée pour modifier entièrement une ressource.
fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Titre modifié',
body: 'Contenu mis à jour',
userId: 1
})
})
.then(response => response.json())
.then(data => console.log(data));
DELETE Supprimer une ressource
Utilisée pour supprimer une ressource.
fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'DELETE'
})
.then(response => {
if (response.ok) {
console.log('Ressource supprimée');
}
});
3. Appels à une API REST
Une API REST est une interface qui permet d'accéder à des données via des requêtes HTTP simples. Chaque action (lire, écrire, modifier, supprimer) est associée à une méthode HTTP (GET, POST, PUT, DELETE).
// Exemple complet avec gestion d'erreur
async function getUsers() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
if (!response.ok) {
throw new Error(`Erreur HTTP: ${response.status}`);
}
const users = await response.json();
// Afficher les noms d'utilisateurs
users.forEach(user => {
console.log(user.name);
});
return users;
} catch (error) {
console.error('Erreur lors de la récupération des utilisateurs:', error);
throw error;
}
}
4. Traiter la réponse JSON
La méthode response.json() convertit automatiquement la réponse HTTP (du type ReadableStream) en un objet JavaScript utilisable. Il faut toujours l'appeler dans un then() car elle retourne une promesse.
fetch('https://api.exemple.com/data')
.then(res => {
if (!res.ok) throw new Error('Erreur de réseau');
return res.json();
})
.then(data => {
console.log('Voici les données JSON :', data);
// Traiter les données...
})
.catch(err => {
console.error('Erreur:', err);
});
Résumé du chapitre
- L'objet
fetchpermet d'envoyer des requêtes HTTP (GET, POST, PUT, DELETE). - Les réponses peuvent être traitées grâce à la méthode
.json()qui convertit le corps en objet JavaScript. - POST et PUT nécessitent un corps au format JSON, transmis via
JSON.stringify()et l'en-tête'Content-Type': 'application/json'. - Les appels à des API REST suivent des conventions pour manipuler des ressources à distance.
- L'asynchronisme des requêtes implique d'utiliser
.then(),.catch()ouasync/await. - Toujours vérifier
response.okou le statut HTTP pour gérer les erreurs.
Maîtriser les requêtes HTTP est essentiel pour construire des applications web dynamiques, connectées à des serveurs ou des APIs tierces.