Backend Development

API RESTful avec Node.js, Express.js et MongoDB

Spread the love

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

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *