Ce tutoriel vous guidera dans la création d’une API RESTful utilisant Node.js, Express.js et MongoDB. Nous aborderons la configuration de votre environnement, la définition des points de terminaison de l’API et la gestion de la persistance des données. À la fin, vous disposerez d’une API fonctionnelle prête à être étendue.
Table des matières
- Introduction aux API REST et à MongoDB
- Configuration de votre environnement de développement
- Configuration du projet et dépendances
- Connexion à MongoDB
- Définition des points de terminaison de l’API (opérations CRUD)
- Test de votre API
- Implémentation d’une gestion robuste des erreurs
- Conclusion et prochaines étapes
Introduction aux API REST et à MongoDB
REST (Representational State Transfer) est un style architectural pour la construction de services web évolutifs et maintenables. Les API REST utilisent les méthodes HTTP standard (GET, POST, PUT, DELETE) pour interagir avec les ressources identifiées par des URL. MongoDB est une base de données NoSQL orientée document qui offre une flexibilité pour le stockage et la récupération des données. Cette combinaison crée une base puissante pour de nombreuses applications.
Configuration de votre environnement de développement
Avant de commencer, assurez-vous d’avoir Node.js et npm (Node Package Manager) installés. Vous pouvez les télécharger depuis nodejs.org. Assurez-vous également que MongoDB est installé et en cours d’exécution. Vous pouvez le télécharger depuis mongodb.com.
Configuration du projet et dépendances
Créez un nouveau répertoire de projet et naviguez-y dans votre terminal. Initialisez un nouveau projet Node.js :
npm init -y
Installez les dépendances nécessaires :
npm install express mongoose body-parser
express
: Un framework d’application web Node.js minimal et flexible.mongoose
: Une bibliothèque ODM (Object Data Modeling) pour MongoDB et Node.js.body-parser
: Middleware pour analyser les corps de requête JSON.
Connexion à MongoDB
Créez un fichier nommé server.js
et ajoutez le code suivant :
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// Chaîne de connexion MongoDB - remplacez par vos informations de connexion
const mongoURI = 'mongodb://localhost:27017/mydatabase';
mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('Connecté à MongoDB'))
.catch(err => console.error('Erreur de connexion à MongoDB :', err));
app.use(bodyParser.json());
app.listen(port, () => console.log(`Serveur en écoute sur le port ${port}`));
Définition des points de terminaison de l’API (opérations CRUD)
Créons un modèle simple et des points de terminaison pour la gestion des éléments. Ajoutez ceci à votre fichier server.js
:
const ItemSchema = new mongoose.Schema({
name: String,
description: String
});
const Item = mongoose.model('Item', ItemSchema);
// POST /items - Créer un nouvel élément
app.post('/items', async (req, res) => {
try {
const newItem = new Item(req.body);
const savedItem = await newItem.save();
res.status(201).json(savedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items - Obtenir tous les éléments
app.get('/items', async (req, res) => {
try {
const items = await Item.find({});
res.json(items);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// GET /items/:id - Obtenir un seul élément par ID
app.get('/items/:id', async (req, res) => {
try {
const item = await Item.findById(req.params.id);
if (!item) return res.status(404).json({ message: 'Élément non trouvé' });
res.json(item);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// PUT /items/:id - Mettre à jour un élément
app.put('/items/:id', async (req, res) => {
try {
const updatedItem = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });
if (!updatedItem) return res.status(404).json({ message: 'Élément non trouvé' });
res.json(updatedItem);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// DELETE /items/:id - Supprimer un élément
app.delete('/items/:id', async (req, res) => {
try {
const deletedItem = await Item.findByIdAndDelete(req.params.id);
if (!deletedItem) return res.status(404).json({ message: 'Élément non trouvé' });
res.json({ message: 'Élément supprimé' });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
Test de votre API
Utilisez des outils comme Postman ou curl pour tester les points de terminaison de votre API. Envoyez des requêtes POST à /items
pour créer de nouveaux éléments, des requêtes GET à /items
pour récupérer tous les éléments, et utilisez les requêtes GET, PUT et DELETE pour les éléments individuels en utilisant leurs ID.
Implémentation d’une gestion robuste des erreurs
L’exemple de code inclut une gestion de base des erreurs. Pour la production, implémentez une gestion des erreurs, une journalisation et une validation des entrées plus complètes.
Conclusion et prochaines étapes
Vous avez créé avec succès une API REST de base avec MongoDB ! Étendez-la en ajoutant l’authentification, l’autorisation, la validation des données et une gestion des erreurs plus sophistiquée. Envisagez d’utiliser une connexion de base de données prête pour la production et explorez les fonctionnalités plus avancées d’Express.js et de Mongoose.