@ovyn/api-server
v1.1.1
Published
Serveur REST type json-server + auth sans dépendances externes
Maintainers
Readme
@ovyn/api-server
Un serveur REST léger type json-server avec authentification JWT, support WebSockets et rechargement à chaud, le tout sans dépendances externes.
Installation
# Installation globale
npm install -g @ovyn/api-server
# Utilisation directe via npx
npx @ovyn/api-server db.jsonUtilisation CLI
api-server [options] [dbFile]Options
-p, --port <number>: Port d'écoute (défaut : 3000)-s, --secret <string>: Secret JWT pour l'authentification (défaut :change-me)-r, --rules <path>: Chemin vers un fichier de règles JSON (facultatif)-v, --version: Affiche la version-h, --help: Affiche l'aide
Exemples
# Lancer avec un fichier spécifique et un secret
api-server db.json --port 3000 --secret monsecret
# Utiliser un fichier de règles pour sécuriser les accès
api-server --rules rules.jsonStructure 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).
{
"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 champuserIdpar défaut)
Exemple de rules.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
Authentification JWT
Le serveur gère nativement le hashage des mots de passe et la génération de tokens.
POST /register: Inscription d'un utilisateurPOST /login: Connexion et récupération du token
Un utilisateur admin par défaut est créé au premier lancement si la collection users est vide : [email protected] / Test1234=.
Filtrage, Tri et Pagination
- Filtrage :
GET /posts?title=Hello - Recherche :
GET /posts?q=searchterm - Tri :
GET /posts?_sort=id&_order=desc - Pagination :
GET /posts?_page=1&_limit=10
WebSockets
Le serveur supporte les WebSockets pour les notifications en temps réel.
Souscription : Envoyez un message JSON pour vous abonner à une collection :
{ "type": "subscribe", "channel": "posts" }Notifications : Vous recevrez des messages lors des modifications :
{ "type": "create", "channel": "posts", "data": { "id": 3, "title": "New" } }Rechargement à chaud (Hot-reload)
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 :
npm testLicence
MIT
