Important
Questo progetto deve essere considerato solo a scopo educativo
Il progetto "pirate-library" è un'applicazione web basata su Nuxt.js, progettata per creare una biblioteca aperta a tutti, con un tocco giocoso ispirato ai pirati. L'obiettivo principale è consentire agli utenti di scaricare libri liberamente, ma anche di registrarsi, accedere, aggiungere nuovi libri, effettuare ricerche globali, visualizzare libri recenti e accedere a dettagli specifici tramite il codice ISBN.
La homepage presenta i libri aggiunti di recente e include la barra di ricerca per consentire agli utenti di cercare titoli specifici. La barra di ricerca è presente su tutte le pagine, tranne quelle dedicate alla login, registrazione e upload.
Questa pagina consente agli utenti di visualizzare in dettaglio un libro utilizzando il codice ISBN come identificatore unico. Gli utenti possono anche scaricare il libro dalla stessa pagina. Se si dispone l'accesso a questa pagina da amministratore, sarà possibile eliminare e modificare il libro selezionato.
Questa pagina fornisce un'interfaccia per effettuare ricerche globali basate sui nomi dei libri. Gli utenti possono inserire il titolo desiderato e visualizzare i risultati corrispondenti.
La pagina di login consente agli utenti registrati di accedere al sistema. Tuttavia, l'accesso è richiesto solo per aggiungere nuovi libri. La consultazione e il download dei libri sono aperti a tutti gli utenti, senza necessità di autenticazione.
La pagina di registrazione consente agli utenti di creare nuovi account. Questo è necessario solo per coloro che desiderano contribuire aggiungendo nuovi libri alla biblioteca.
Questa pagina consente agli utenti autenticati di caricare informazioni e risorse relative a un nuovo libro. L'upload comprende dettagli come il titolo, l'autore, la copertina, il codice ISBN e il file del libro stesso.
-
Homepage
- Visualizzazione dei libri recenti.
- Barra di ricerca per ricerche rapide.
-
Dettaglio Libro
- Accesso alle informazioni dettagliate utilizzando il codice ISBN.
- Possibilità di scaricare il libro direttamente dalla pagina.
-
Ricerca Libri
- Effettuare ricerche globali basate sui nomi dei libri.
- Visualizzazione dei risultati corrispondenti.
-
Login
- Accesso riservato agli utenti registrati.
- Richiesto solo per l'aggiunta di nuovi libri.
-
Registrazione
- Creazione di nuovi account utente.
- Necessario solo per coloro che desiderano contribuire con nuovi libri.
-
Caricamento Libri
- Accesso consentito solo agli utenti autenticati.
- Caricamento di informazioni e risorse relative a un nuovo libro.
+-----------------------+
| |
| Frontend |
| (localhost:3001) |
+-----------+-----------+
|
| HTTP Requests
|
+-----------v-----------+
| |
| API REST (Express) |
| (localhost:3000) |
+-----------+-----------+
|
| HTTP Requests
|
+-----------v-----------+
| |
| rustedhttpd Server |
| (Custom) |
| |
+-----------------------+
|
| File Requests (HTTP)
|
+-----------v-----------+
| |
| File System (web) |
| |
+-----------------------+
Questo documento fornisce una relazione tecnica sull'API REST sviluppata con Express e Bun (ts-node non voleva funzionare.) , inclusa una panoramica delle funzionalità offerte, delle tecnologie utilizzate e dell'integrazione con il server web per servire i file statici.
L'API REST è progettata per fornire un'interfaccia robusta per la gestione dei libri e degli utenti di una piattaforma di biblioteca digitale. Utilizza un'architettura basata su HTTP per consentire agli utenti di registrarsi, autenticarsi, caricare libri e cercare libri per ISBN o nome.
Le principali funzionalità dell'API REST includono:
- Registrazione degli utenti fornendo un'email e una password.
- Autenticazione degli utenti mediante email e password, con generazione di token JWT per l'autorizzazione.
- Caricamento dei libri insieme alle informazioni associate (ISBN, titolo, autore, ecc.) e ai file del libro e alla miniatura.
- Ricerca dei libri per ISBN o per nome.
- Visualizzazione di una lista paginata di libri.
L'API REST è sviluppata utilizzando le seguenti tecnologie:
- Bun e Express.js: Utilizzati per la creazione del backend dell'applicazione e per la gestione delle richieste HTTP.
- MongoDB e Mongoose: Utilizzati per la memorizzazione dei dati degli utenti e dei libri in un database NoSQL.
- JWT (JSON Web Token): Utilizzato per l'autenticazione e l'autorizzazione degli utenti.
- Multer e body-parser: Utilizzati per il parsing dei dati delle richieste e la gestione dei file inviati.
- cors: Utilizzato per la gestione delle richieste CORS (Cross-Origin Resource Sharing).
Il server web personalizzato "rustedhttpd" viene utilizzato per servire i file statici associati ai libri, come i file del libro e le miniature, dalla directory rusted_files/web.
"rustedhttpd" è un server web custom sviluppato in Rust che serve i file statici tramite protocollo HTTP. Utilizzando un'interfaccia di configurazione, è possibile specificare la directory dei file da servire e le impostazioni del server.
Nel contesto dell'API REST, "rustedhttpd" è integrato come parte del sistema di distribuzione dei contenuti statici. Quando un utente effettua una richiesta per un file associato a un libro (come il file del libro o la miniatura), l'API REST instrada la richiesta a "rustedhttpd", che a sua volta restituisce il file richiesto al client.
Questo endpoint consente agli utenti autenticati di caricare un nuovo libro insieme alle informazioni associate e ai file del libro e alla miniatura.
- Metodo HTTP:
POST
- Endpoint:
/upload-book
- Headers:
- Authorization: Token JWT per l'autenticazione dell'utente
- Body (form-data):
-
{ "isbn": "Stringa, ISBN del libro", "title": "Stringa, titolo del libro", "plot": "Stringa, trama del libro", "year": "Numero intero, anno di pubblicazione del libro", "language": "Stringa, lingua del libro", "pages": "Numero intero, numero di pagine del libro", "author": "Stringa, autore del libro", "publisher": "Stringa, editore del libro", "categories": "Array di stringhe, categorie del libro", "book": "File, file del libro", "thumbnail": "File, miniatura del libro" }
-
- Risposte:
-
{ "200 OK": "Il libro è stato caricato con successo.", "400 Bad Request": "I file del libro e/o della miniatura non sono stati forniti.", "403 Forbidden": "Token di autenticazione mancante.", "500 Internal Server Error": "Errore interno del server." }
-
Questo endpoint consente agli utenti di autenticarsi fornendo email e password.
- Metodo HTTP:
POST
- Endpoint:
/login
- Body:
-
{ "email": "Stringa, email dell'utente", "password": "Stringa, password dell'utente" }
-
- Risposte:
-
{ "200 OK": "L'autenticazione è avvenuta con successo, viene restituito un token JWT.", "401 Unauthorized": "Email o password non validi.", "500 Internal Server Error": "Errore interno del server." }
-
Questo endpoint consente agli utenti di creare un nuovo account fornendo email e password.
- Metodo HTTP:
POST
- Endpoint:
/create
- Body:
-
{ "email": "Stringa, email dell'utente", "password": "Stringa, password dell'utente" }
-
- Risposte:
-
{ "201 Created": "L'account è stato creato con successo.", "400 Bad Request": "L'utente esiste già.", "500 Internal Server Error": "Errore interno del server." }
-
Questo endpoint consente agli utenti di cercare un libro per ISBN.
Endpoint: /search-by-isbn/:isbn
Metodo HTTP: GET
Parametri:
isbn: ISBN del libro (parametro di percorso)
Risposte:
200 OK: Il libro è stato trovato e viene restituito.
404 Not Found: Il libro non è stato trovato.
500 Internal Server Error: Errore interno del server.
Questo endpoint consente agli utenti di cercare libri per nome.
Endpoint: /search-by-name/:name
Metodo HTTP: GET
Parametri:
name: Nome del libro (parametro di percorso)
Risposte:
-
{ "200 OK": "La lista dei libri è stata restituita con successo.", "404 Not Found": "Nessun libro trovato.", "500 Internal Server Error": "Errore interno del server." }
Questo endpoint consente agli utenti di ottenere una lista paginata di libri.
Metodo HTTP: GET
Endpoint: /books
Parametri:
page: Numero di pagina (parametro di query, opzionale)
Risposte:
-
{ "200 OK": "La lista dei libri è stata restituita con successo.", "500 Internal Server Error": "Errore interno del server." }
Questo endpoint consente agli utenti di cercare libri per nome.
- Endpoint: /search-by-name/:name
- Metodo HTTP:
GET
- Parametri:
- name: Nome del libro (parametro di percorso)
- Risposte:
-
{ "200 OK": "I libri sono stati trovati e vengono restituiti.", "404 Not Found": "Nessun libro trovato.", "500 Internal Server Error": "Errore interno del server." }
-
Questo endpoint consente agli utenti di aggiornare i dettagli di un libro esistente.
- Endpoint: /edit-book/:bookId
- Metodo HTTP:
PUT
- Parametri URL:
- bookId (obbligatorio): L'ID del libro da modificare.
- Intestazione:
- Authorization: Token di autenticazione JWT.
- Corpo della Richiesta:
- Il corpo della richiesta deve contenere i dati aggiornati del libro nel formato JSON. I campi che possono essere aggiornati sono:
- isbn (String)
- title (String)
- plot (String)
- year (Number)
- language (String)
- pages (Number)
- author (String)
- publisher (String)
- categories (Array)
- Il corpo della richiesta deve contenere i dati aggiornati del libro nel formato JSON. I campi che possono essere aggiornati sono:
- Esempio:
{ "title": "Nuovo Titolo del Libro", "plot": "Nuovo Riassunto del Libro", "year": 2023 }
- Risposte:
-
{ "200 OK": "La richiesta è stata elaborata con successo e il libro è stato aggiornato correttamente.", "400 Bad Request": "Se i dati inviati non sono validi o il corpo della richiesta è vuoto.", "403 Forbidden": "Se l'utente non è autorizzato a modificare il libro.", "404 Not Found": "Se il libro specificato non esiste.", "500 Internal Server Error": "Se si è verificato un errore durante l'elaborazione della richiesta sul server." }
-
Questo endpoint consente agli utenti di eliminare un libro esistente.
- Metodo HTTP:
DELETE
- Endpoint: /delete-book/:bookId
- Parametri URL:
- bookId (obbligatorio): L'ID del libro da eliminare.
- Intestazione:
- Authorization: Token di autenticazione JWT.
- Risposte:
-
{ "200 OK": "La richiesta è stata elaborata con successo e il libro è stato eliminato correttamente.", "403 Forbidden": "Se l'utente non è autorizzato a eliminare il libro.", "404 Not Found": "Se il libro specificato non esiste.", "500 Internal Server Error": "Se si è verificato un errore durante l'elaborazione della richiesta sul server." }
-
Questo endpoint consente agli utenti di ottenere una lista paginata di libri.
- Metodo HTTP:
GET
- Endpoint:
/books
- Parametri:
- page: Numero di pagina (parametro di query, opzionale)
- Risposte:
-
{ "200 OK": "La lista dei libri è stata restituita con successo.", "500 Internal Server Error": "Errore interno del server." }
-