Bienvenue sur mon projet d’API REST développé avec Node.js, Express et MySQL.
Ce projet est une démonstration de mes compétences backend et de ma rigueur de développement.
L’objectif n’était pas seulement de créer une API CRUD classique, mais aussi de :
- Structurer le projet pour être clair et maintenable
- Assurer la cohérence des réponses JSON (succès comme erreurs)
- Mettre en place des pratiques de sécurité basiques (utilisateur MySQL limité, variables d’environnement)
- Fournir un code qui puisse servir de base réutilisable
- 📂 Structure claire : séparation des routes, services, helpers, etc.
- 📡 Réponses JSON uniformisées : chaque endpoint renvoie un format cohérent avec un code de succès/erreur et un message explicite.
- 🔐 Sécurité :
- Utilisation d’un utilisateur MySQL dédié aux droits minimaux
- Stockage des informations sensibles dans un fichier
.env(jamais versionné)
- ⚡ CRUD complet : gestion de bout en bout (Create, Read, Update, Delete) sur une ressource
users. - 🛠️ Bonne pratique dev : helpers pour les réponses, organisation en modules, préparation pour des tests unitaires.
- Node.js – Backend runtime
- Express – Framework minimaliste
- MySQL – Base de données relationnelle
- dotenv – Gestion des variables d’environnement
git clone https://github.com/DBKDev/node-api-rest-crud.git
cd node-api-rest-crudnpm installCréez un fichier .env à la racine du projet, basé sur .env.example :
PORT=3000
DB_HOST=localhost
DB_PORT=3306
DB_USER=user_dedie
DB_PASSWORD=mot_de_passe
DB_NAME=demo_apiImportez le fichier schema.sql pour créer la structure (sans données sensibles) :
mysql -u user_dedie -p demo_api < schema.sqlnpm start👉 Le serveur tourne par défaut sur http://localhost:3000.
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /users |
Récupère tous les users |
| GET | /users |
Récupère un user précis |
| POST | /users |
Crée un nouvel user |
| PATCH | /users |
Modifie un user |
| DELETE | /users/:id |
Supprime un user |
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /posts |
Récupère tous les posts |
| GET | /posts/:id |
Récupère un post précis |
| GET | /posts/users/:userId |
Récupère tous les posts d’un user |
| POST | /posts |
Crée un nouveau post |
| PATCH | /posts |
Modifie un post |
| DELETE | /posts/:id |
Supprime un post par son ID |
| DELETE | /posts/users/:userId/posts |
Supprime tous les posts d’un user |
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /comments |
Récupère tous les commentaires |
| GET | /comments/:id |
Récupère un commentaire précis |
| PATCH | /comments |
Modifie un commentaire |
| DELETE | /comments/:id |
Supprime un commentaire |
{
"code": 200,
"status": "success",
"message": "User retrieved successfully",
"details": {
"userId": "5"
},
"data": {
"id": 5,
"firstname": "Emma",
"lastname": "Petit"
}
}{
"code": 400,
"status": "error",
"message": "Some required fields are missing",
"details": {
"errorCode": "VALIDATION_ERROR",
"required": [
"firstname",
"lastname"
]
},
"data": null
}👉 Chaque réponse contient un status, un code HTTP clair, et un message explicite, ce qui permet à un client (frontend, Postman, autre API) de comprendre rapidement le résultat.
📦 node-api-rest-crud
├── 📂 helpers → Fonctions utilitaires (réponses JSON, gestion des codes d’erreur/succès)
├── 📂 modules → Logique métier (CRUD)
├── 📂 services → Connexion BDD, requêtes SQL
├── app.js → Point d’entrée de l’application
├── .env.example → Variables d’environnement à adapter
└── package.json → Dépendances & scripts
- ✅ Utilisation d’un utilisateur MySQL dédié avec permissions limitées (principe du moindre privilège).
- ✅ Gestion des données sensibles via
.env(non versionné dans Git). - ✅ Dump SQL (
Apirestbdd.sql) ignoré dans Git pour éviter toute fuite. - ✅ Réponses JSON cohérentes avec codes d’erreur et de succès uniformisés.
- 📖 Ajouter une documentation
- 🧩 Intégrer un middleware de validation (
express-validator/zod) - 🧪 Écrire des tests unitaires avec Jest + Supertest
- 🐳 Ajouter Docker pour faciliter le déploiement
Ce projet est publié sous la licence MIT.