Dans cet article nous allons voir comment utiliser json-server afin de créer une fake API REST.
La version de json-server qui sera utilisée sera la version stable disponible >> ici <<.
json-server s’installe via la commande :
npm install json-server@^.17.4
Une fois installé on créé le fichier db.json à la racine du dossier. Ce fichier va contenir les données ci-dessous :
{
"balls": [
{ "id": "1", "name": "baballe de Malo", "catId": "1" },
{ "id": "2", "name": "baballe de Pitau", "catId": "2" },
{ "id": "3", "name": "baballe de Moe", "catId": "3" },
{ "id": "4", "name": "baballe de Malo", "catId": "1" },
{ "id": "5", "name": "baballe de Pitau", "catId": "2" },
{ "id": "6", "name": "baballe de Moe", "catId": "3" }
],
"colors": [
{ "id": "1", "color": "bleue", "ballId": "1" },
{ "id": "2", "color": "verte", "ballId": "4" },
{ "id": "3", "color": "jaune", "ballId": "2" },
{ "id": "4", "color": "rouge", "ballId": "5" },
{ "id": "5", "color": "orange", "ballId": "3" },
{ "id": "6", "color": "rose", "ballId": "6" }
],
"cats": [
{ "id": "1", "name": "Malo" },
{ "id": "2", "name": "Pitau" },
{ "id": "3", "name": "Moe" }
]
}
Puis on lance le serveur json via la commande :
npx json-server db.json
Et l’on peut tester des requêtes via Thunderclient :
Ici on récupère la liste de tous les chats via un
GET http://localhost:3000/cats

Et là on récupère la liste des chats et de leurs balles via un
GET http://localhost:3000/cats?_embed=balls

Une fois ces premiers tests réalisés, afin de savoir si l’API fonctionne, on peut écrire le code JavaScript qui permettra d’afficher les infos contenues dans le fichier json sur une page web.
// Fonction asynchrone pour récupérer les données depuis le serveur JSON
async function fetchData() {
try {
// Récupére les données des balles
const ballsResponse = await fetch('http://localhost:3000/balls');
const balls = await ballsResponse.json();
// Récupére les données des couleurs
const colorsResponse = await fetch('http://localhost:3000/colors');
const colors = await colorsResponse.json();
// Récupére les données des chats
const catsResponse = await fetch('http://localhost:3000/cats');
const cats = await catsResponse.json();
// Retourne un objet contenant les balles, les couleurs et les chats
return { balls, colors, cats };
} catch (error) {
// Affiche une erreur dans la console en cas de problème de récupération des données
console.error('Une erreur est survenue lors de la récupération des données :', error);
}
}
// Fonction asynchrone pour générer le contenu HTML
async function generateContent() {
// Appele de la fonction fetchData et attendre qu'elle se termine
const { balls, colors, cats } = await fetchData();
// Vérifie si les données ont été récupérées correctement
if (!balls || !colors || !cats) {
console.error('Impossible de récupérer toutes les données.');
return;
}
// Fonction pour obtenir le nom d'un chat à partir de son ID
function getCatName(catId) {
const cat = cats.find(cat => cat.id === catId);
return cat ? cat.name : "Catégorie inconnue";
}
// Organiser les balles par chat
const ballsByCat = {};
balls.forEach(ball => {
const catName = getCatName(ball.catId);
if (!ballsByCat[catName]) {
ballsByCat[catName] = [];
}
ballsByCat[catName].push(ball);
});
// Sélectionner l'élément div où le contenu sera affiché
const contentDiv = document.getElementById("content");
// Parcourir chaque chat et ses balles correspondantes
Object.keys(ballsByCat).forEach(catName => {
const catBalls = ballsByCat[catName];
// Créé une liste ordonnée pour les balles du chat
const catList = document.createElement("ol");
// Parcours les balles du chat et ajoute des éléments de liste pour chaque balle
catBalls.forEach(ball => {
const ballItem = document.createElement("li");
const ballColors = colors.filter(color => color.ballId === ball.id);
const ballColorText = ballColors.map(color => color.color).join(" et ");
ballItem.textContent = `${ball.name}, couleur(s) : ${ballColorText}`;
catList.appendChild(ballItem);
});
// Créé un en-tête pour le chat avec le nombre de balles lui appartenant
const catHeader = document.createElement("h2");
catHeader.textContent = `${catName} a ${catBalls.length} balle(s) :`;
contentDiv.appendChild(catHeader);
contentDiv.appendChild(catList);
});
}
// Appele de la fonction generateContent
generateContent();
Et voici le résultat !

Si l’on modifie les données dans json.db comme ci-dessous :
{
"balls": [
{ "id": "1", "name": "baballe de Malo", "catId": "1" },
{ "id": "2", "name": "baballe de Pitau", "catId": "2" },
{ "id": "3", "name": "baballe de Moe", "catId": "3" },
{ "id": "4", "name": "baballe de Malo", "catId": "1" },
{ "id": "5", "name": "baballe de Pitau", "catId": "2" },
{ "id": "6", "name": "baballe de Moe", "catId": "3" },
{ "id": "7", "name": "baballe de Moe", "catId": "3" }
],
"colors": [
{ "id": "1", "color": "bleue", "ballId": "1" },
{ "id": "2", "color": "verte", "ballId": "4" },
{ "id": "3", "color": "jaune", "ballId": "2" },
{ "id": "4", "color": "rouge", "ballId": "5" },
{ "id": "5", "color": "orange", "ballId": "3" },
{ "id": "6", "color": "rose", "ballId": "6" },
{ "id": "7", "color": "violette", "ballId": "7" }
],
"cats": [
{ "id": "1", "name": "Malo" },
{ "id": "2", "name": "Pitau" },
{ "id": "3", "name": "Moe" }
]
}
Cela modifiera évidemment la page affichant les baballes des chats. Maintenant Moe a 3 baballes !

Consultante spécialisée dans les technologies Microsoft, je justifie de plus de 14 ans d’expérience dans le secteur IT.
Mon parcours professionnel, riche et varié, m’a permis de développer de solides compétences, tant techniques qu’humaines. Je suis reconnue pour ma capacité à analyser rapidement les enjeux techniques et à concevoir des solutions pertinentes, y compris sur des problématiques complexes.
Mon approche proactive, alliée à mes compétences en développement, me permet de proposer des évolutions efficaces, toujours en cohérence avec les objectifs métiers.
En parallèle de mon activité professionnelle, je prends plaisir à approfondir mes compétences techniques en réalisant des projets personnels. Je développe notamment des jeux web basés sur React et PHP, ainsi que des applications orientées métier avec SPFx.