JustPlay API è un'applicazione Node.js per la gestione dei dati dei videogiochi. Questa API supporta funzionalità di autenticazione, autorizzazione, paginazione, caching, monitoraggio delle metriche e documentazione Swagger.
- Node.js (v14 o superiore)
- MongoDB (v4 o superiore)
-
Clona il repository:
git clone https://github.com/Geppe1990/justPlay-api.git cd justPlay-api
-
Installa le dipendenze:
npm install
-
Crea un file
.env
nella root del progetto con il seguente contenuto:PORT=3000 MONGO_URI=mongodb://127.0.0.1:27017/videogames JWT_SECRET=your_jwt_secret
-
Avvia MongoDB:
mongod --dbpath ~/mongodb-data
-
Avvia l'applicazione:
npm run dev
src/
app.ts
: File principale dell'applicazione.routes/
: Contiene le definizioni delle route.games.ts
: Route per la gestione dei videogiochi.auth.ts
: Route per la registrazione e login degli utenti.
controllers/
: Contiene i controller per le route.gameController.ts
: Controller per le operazioni sui videogiochi.authController.ts
: Controller per le operazioni di autenticazione.
services/
: Contiene i servizi per la logica di business.gameService.ts
: Servizio per la gestione dei videogiochi.
models/
: Contiene i modelli Mongoose.Game.ts
: Modello per i videogiochi.Platform.ts
: Modello per le piattaforme.Genre.ts
: Modello per i generi.User.ts
: Modello per gli utenti.
middleware/
: Contiene i middleware dell'applicazione.errorHandler.ts
: Middleware per la gestione degli errori.cache.ts
: Middleware per il caching.rateLimiter.ts
: Middleware per il rate limiting.metrics.ts
: Middleware per la raccolta delle metriche Prometheus.
utils/
: Contiene utilità varie.logger.ts
: Configurazione di winston per il logging.
swagger/
: Configurazione di Swagger per la documentazione delle API.swagger.ts
: Configurazione di Swagger.
L'applicazione utilizza JWT (JSON Web Tokens) per autenticare e autorizzare gli utenti. Le route protette richiedono un token JWT valido.
Le route per ottenere i videogiochi supportano la paginazione tramite i parametri page
e limit
.
Per prevenire abusi delle API, l'applicazione utilizza express-rate-limit
per limitare il numero di richieste per IP.
L'applicazione utilizza apicache
per memorizzare nella cache le risposte delle API e migliorare le prestazioni.
L'applicazione raccoglie metriche Prometheus tramite prom-client
e le espone all'endpoint /metrics
. Utilizza morgan
per il logging delle richieste HTTP.
L'applicazione è documentata tramite Swagger. Puoi accedere alla documentazione interattiva all'endpoint /api-docs
.
Per registrare un nuovo utente, utilizza l'endpoint di registrazione.
- Endpoint:
POST /auth/register
- Body:
{ "username": "your_username", "password": "your_password" }
- Esempio
curl -X POST http://localhost:3000/auth/register \\ -H "Content-Type: application/json" \\ -d '{"username": "your_username", "password": "your_password"}'
Per effettuare il login di un utente registrato, utilizza l’endpoint di login.
- Endpoint:
POST /auth/login
- Body:
{ "username": "your_username", "password": "your_password" }
- Risposta
{ "token": "jwt_token" }
- Esempio
curl -X POST http://localhost:3000/auth/login \ -H "Content-Type: application/json" \ -d '{"username": "your_username", "password": "your_password"}'
Per accedere alle rotte protette, è necessario includere il token JWT nell’intestazione Authorization delle richieste.
- Intestazione:
{ Authorization: Bearer jwt_token }
- Esempio
curl -X GET http://localhost:3000/games \ -H "Authorization: Bearer jwt_token"