Serveur REST type json-server + auth sans dépendances externes
Un serveur REST léger type json-server avec authentification JWT, support WebSockets et rechargement à chaud, le tout sans dépendances externes.
``bashInstallation globale
npm install -g @ovyn/api-server
Utilisation CLI
`bash
api-server [options] [dbFile]
`$3
-
-p, --port : Port d'écoute (défaut : 3000)
- -s, --secret : Secret JWT pour l'authentification (défaut : change-me)
- -r, --rules : Chemin vers un fichier de règles JSON (facultatif)
- -v, --version : Affiche la version
- -h, --help : Affiche l'aide$3
`bash
Lancer avec un fichier spécifique et un secret
api-server db.json --port 3000 --secret monsecretUtiliser un fichier de règles pour sécuriser les accès
api-server --rules rules.json
`Structure des données (
db.json)Le fichier de base de données est un objet JSON où chaque clé représente une collection (un tableau d'objets).
`json
{
"posts": [
{ "id": 1, "title": "Hello World", "userId": 1 },
{ "id": 2, "title": "Mon deuxième post", "userId": 1 }
],
"comments": [
{ "id": 1, "body": "Super !", "postId": 1 }
]
}
`Sécurisation et Règles (
rules.json)Vous pouvez définir des permissions par collection dans un fichier
rules.json.
Les niveaux de permission sont :
- * : Public (ouvert à tous)
- auth : Utilisateur connecté requis (via token JWT)
- owner : Propriétaire de la ressource uniquement (vérifie le champ userId par défaut)Exemple de
rules.json :`json
{
"posts": {
"GET": "*",
"POST": "auth",
"PUT": "owner",
"DELETE": "owner"
},
"users": {
"GET": "owner",
"PUT": "owner"
}
}
`> Note : Les utilisateurs avec le rôle
admin (défini dans le token ou la DB) ont accès à tout par défaut.Fonctionnalités
$3
Le serveur gère nativement le hashage des mots de passe et la génération de tokens.
- POST /register : Inscription d'un utilisateur
- POST /login : Connexion et récupération du tokenUn utilisateur admin par défaut est créé au premier lancement si la collection
users est vide : admin@bstorm.be / Test1234=.$3
- Filtrage : GET /posts?title=Hello
- Recherche : GET /posts?q=searchterm
- Tri : GET /posts?_sort=id&_order=desc
- Pagination : GET /posts?_page=1&_limit=10$3
Le serveur supporte les WebSockets pour les notifications en temps réel.Souscription :
Envoyez un message JSON pour vous abonner à une collection :
`json
{ "type": "subscribe", "channel": "posts" }
`Notifications :
Vous recevrez des messages lors des modifications :
`json
{ "type": "create", "channel": "posts", "data": { "id": 3, "title": "New" } }
`$3
Les modifications apportées au fichier db.json ou au fichier de règles sont détectées et appliquées instantanément sans redémarrage.Tests
Le projet utilise Jest pour sa suite de tests :
`bash
npm test
``MIT