Un starter pack dockerisé d'une application web node.js pour développer une web API RESTful. L'API vient avec un service de base de données relationnelles (MySQL) et un client graphique (Adminer).
- Starter pack: RESTful web API avec Node.js, Express.js, MySQL et Adminer
- Installer Docker;
- Cloner le dépôt et se placer à la racine du projet;
N'oubliez pas de supprimer le dossier
.git
si vous désirez créer votre propre dépôt à partir des sources
rm -R .git
git init
- Dupliquer le fichier
.env.dist
:
cp .env.dist .env
Vous pouvez modifier les variables d'environnement si vous le souhaitez (des valeurs par défaut sont fournies)
- Démarrer le projet :
docker compose watch
Les sources JavaScript sont watchées, l'application Node redémarre à chaque édition des sources.
docker compose down
Se rendre à l'URL localhost:5001, ou avec curl :
curl -i localhost:5001
Vous devriez voir une page HTML qui affiche des données issues de la base de données MySQL.
Attendez quelques secondes que le serveur MySQL soit prêt à accepter des requêtes.
Penser à modifier la valeur du port si vous l'avez changé dans le
.env
La base de données vient avec deux utilisateurs :
root
(administrateur), mot de passe :root
user
(utilisateur lambda), mot de passe :password
Le projet vient avec Adminer, un gestionnaire de base de données avec interface graphique, simple et puissant.
Se rendre sur l'URL http://localhost:5003 (par défaut) et se connecter avec les credentials root ou user.
mysql -uroot -proot -Dmydb -h127.0.0.1 -P5002
Machine hôte : la machine sur laquelle s’exécute les conteneurs Docker, votre machine
Puis, dans le repl MySQL (session ouverte avec la commande précédente)
-- Lister les utilisateurs MySQL
SELECT user FROM mysql.user;
-- Lister les users dans la base de départ
SELECT * FROM User;
Préférer utiliser l'adresse IP
127.0.0.1
plutôt que son aliaslocalhost
afin éviter des potentiels conflits de configuration avec le fichier socket du serveur MySQL potentiellement installé sur votre machine hôte.
Le nom de l'hôte est db
, le nom du service sur le réseau Docker.
(Re)générer la documentation interactive de votre API avec le module swagger-autogen (déjà installé):
docker exec -it demo-rest-api-api npm run swagger-autogen
Se rendre à l'URL /doc
pour accéder à Swagger UI et à la documentation interactive de votre API.
Vous pouvez installer de nouvelles dépendances au besoin. À la racine de l'application, installer les dépendances désirées via npm
:
docker exec -it demo-rest-api-api npm install <le nom du paquet>
ou directement sur la machine hôte (changements seront repercutés par le watch des sources):
npm install <le nom du paquet>
Lister les dépendances du projet Node:
docker exec -it demo-rest-api-api npm list
- Débuger : Inspecter les logs du conteneur Docker (
docker logs -f demo-rest-api-api
, ou via Docker Desktop ou via l'extension officielle Docker) qui contiennent tout ce qui est écrit sur la sortie standard (avecconsole.log()
). Les sources de l'application Node.js sont watchées, donc à chaque modification d'un fichier source l'application redémarre pour les prendre en compte automatiquement ; - Ouvrez une connexion MySQL pendant votre développement pour tester vos requêtes avant de les intégrer dans votre code;
- Utiliser cURL pour tester rapidement vos requêtes HTTP.
- Ouvrez deux terminaux: l'un avec cURL et l'autre avec les logs de l'API pour débuger facilement votre système;
- Installer le module
dotenv
pour placer le DSN (informations de connexion à la base) en dehors du code; - Pour tester des enchaînements de requêtes, écrivez un script SQL pour remettre la base dans un état initial et contenant les requêtes à tester, un script pour effectuer les requêtes HTTP avec cURL, et exécuter le tout en une commande (en vous servant de l'opérateur du shell
&&
).
- express ;
- jsonwebtoken, une implémentation javascript du standard JSON Web Token, voir RFC 7519 ;
- cors, un module middleware pour gérer la politique CORS (Cross Origin Resource Sharing);
- mysql2, un client MySQL pour Node.js qui utilise l'API des promesses (contrairement à son prédécesseur mysql);
- Générateur d’applications Express, générer un projet pour démarrer
- Routage, la documentation sur le routage d'Express
- Pug, moteur de templates javascript installé par défaut avec Express
- API JSON Web Token Authentication (JWT) sur Express.js, un bon tutoriel pour mettre en place des routes protégées par Json Web Token
- Swagger UI, servir une documentation web interactive de l'API à partir de sa description OpenAPi (même si elle devrait être par définition auto-documentée et auto-descriptive, c'est toujours appréciable)
- Swagger UI Express, module Node.js pour intégrer Swagger UI à un projet Node.js;
- Swagger auto-gen, module de génération automatique de la description OpenAPI de l'API à partir des métadonnées placées dans les sources d'une application Node.js/Express;
- Swagger auto-gen: décrire des paramètres de formulaire POST
- The OpenAPI Specification Explained, le guide
- OpenAPI Specification, la référence complète, pour décrire votre API au format YAML ou JSON;
- Documentation de swagger auto-gen, documentation sur les tags à inclure dans les sources pour générer l'OpenAPI Description fil. Attention à bien utiliser la version OpenAPI 3.x
- MySQL Docker Image, quick reference
- mysql2, le driver node.js pour le SGBDR MySQL qui implémente l'API des promesses (contrairement à mysql)
- Sequelize, Getting Started, Sequelize, un ORM pour Node.js