- Autore: Marco Avella
- Matricola: 260901
- Titolo del Progetto: Servizio Web per il Monitoraggio del COVID-19 nella Regione Marche
Il servizio web sviluppato offre un'interfaccia API RESTful per l'accesso e la gestione dei dati relativi ai casi di COVID-19 nella Regione Marche. Il servizio permette agli utenti di visualizzare rapporti giornalieri, aggiungere nuovi rapporti, aggiornare o eliminare quelli esistenti e visualizzare statistiche aggregate.
Il servizio è costruito utilizzando Node.js e il framework Express, che facilita la creazione di API web in modo efficiente e scalabile. I dati sono memorizzati in un file JSON, simulando un database per la persistenza dei dati. L'autenticazione è gestita tramite JWT (JSON Web Tokens), permettendo operazioni di scrittura e cancellazione solo agli utenti autenticati.
- Componenti Software: Node.js, Express.
- Database: File JSON (
covid-marche.json
) per la persistenza dei dati. - Autenticazione: JWT per operazioni protette.
- Librerie:
jsonwebtoken
per la gestione dei token,moment
per la manipolazione delle date.
N/A - Tutti i dati sono gestiti internamente e non si fa affidamento su servizi esterni.
- POST
/marche/covid/login
- Descrizione: Autenticazione dell'utente per ricevere un token JWT.
- Body richiesta:
{"username": "string", "password": "string"}
- Risposta: Token JWT per autenticazione nelle operazioni protette.
- Esempio di richiesta:
{ "username": "admin", "password": "admin" }
- Esempio di risposta:
{ "token": "<JWT_TOKEN>" }
-
GET
/marche/covid/rapporti-quotidiani
- Descrizione: Restituisce tutti i rapporti quotidiani disponibili.
- Risposta: Array di oggetti rapporto.
-
GET
/marche/covid/rapporti-quotidiani/ultimo
- Descrizione: Restituisce l'ultimo rapporto disponibile.
- Risposta: Oggetto contenente l'ultimo rapporto.
-
GET
/marche/covid/rapporti-quotidiani/:data
- Descrizione: Restituisce il rapporto per la data specificata.
- Parametri URL:
data
(formato YYYY-MM-DD) - Risposta: Oggetto rapporto per la data specificata.
-
GET
/marche/covid/rapporti-quotidiani/:dataInizio/:dataFine
- Descrizione: Restituisce i rapporti in un intervallo di date.
- Parametri URL:
dataInizio
edataFine
(formato YYYY-MM-DD) - Risposta: Array di oggetti rapporto nell'intervallo specificato.
-
POST
/marche/covid/rapporti-quotidiani
- Descrizione: Aggiunge un nuovo rapporto.
- Body richiesta: Oggetto contenente i dati del nuovo rapporto.
- Risposta: Messaggio di conferma.
-
PUT
/marche/covid/rapporti-quotidiani/:data
- Descrizione: Aggiorna il rapporto per la data specificata.
- Parametri URL:
data
(formato YYYY-MM-DD) - Body richiesta: Oggetto con i dati aggiornati del rapporto.
- Risposta: Messaggio di conferma.
-
DELETE
/marche/covid/rapporti-quotidiani/:data
- Descrizione: Elimina il rapporto per la data specificata.
- Parametri URL:
data
(formato YYYY-MM-DD) - Risposta: Messaggio di conferma.
-
Totale Casi Positivi
- Endpoint:
GET /marche/covid/statistiche/totale-casi-positivi
- Descrizione: Restituisce il totale dei casi positivi registrati da inizio pandemia nella Regione Marche.
- Risposta:
- Formato: JSON
- Esempio:
{"totale_casi_positivi": 123456}
- Endpoint:
-
Totale Casi Guariti
- Endpoint:
GET /marche/covid/statistiche/totale-casi-guariti
- Descrizione: Restituisce il totale dei casi guariti registrati da inizio pandemia nella Regione Marche.
- Risposta:
- Formato: JSON
- Esempio:
{"totale_casi_guariti": 120000}
- Endpoint:
-
Totale Casi Deceduti
- Endpoint:
GET /marche/covid/statistiche/totale-casi-deceduti
- Descrizione: Restituisce il totale dei decessi registrati da inizio pandemia nella Regione Marche.
- Risposta:
- Formato: JSON
- Esempio:
{"totale_casi_deceduti": 3456}
- Endpoint:
-
Nuovi Positivi Quotidiani
- Endpoint:
GET /marche/covid/statistiche/nuovi-positivi-quotidiani/:dataInizio/:dataFine
- Descrizione: Restituisce il numero di nuovi casi positivi per ogni giorno nell'intervallo specificato.
- Parametri URL:
dataInizio
: Data di inizio dell'intervallo (YYYY-MM-DD).dataFine
: Data di fine dell'intervallo (YYYY-MM-DD).
- Risposta:
- Formato: JSON
- Esempio:
[{ "data": "YYYY-MM-DD", "nuovi_positivi": 100 }, ...]
- Endpoint:
-
Nuovi Guariti Quotidiani
- Endpoint:
GET /marche/covid/statistiche/nuovi-guariti-quotidiani/:dataInizio/:dataFine
- Descrizione: Restituisce il numero di nuovi guariti per ogni giorno nell'intervallo specificato.
- Parametri URL:
dataInizio
edataFine
come sopra.
- Risposta:
- Formato: JSON
- Esempio:
[{ "data": "YYYY-MM-DD", "nuovi_guariti": 95 }, ...]
- Endpoint:
-
Nuovi Deceduti Quotidiani
- Endpoint:
GET /marche/covid/statistiche/nuovi-deceduti-quotidiani/:dataInizio/:dataFine
- Descrizione: Restituisce il numero di nuovi decessi per ogni giorno nell'intervallo specificato.
- Parametri URL:
dataInizio
edataFine
come sopra.
- Risposta:
- Formato: JSON
- Esempio:
[{ "data": "YYYY-MM-DD", "nuovi_deceduti": 2 }, ...]
- Endpoint:
-
Media Nuovi Positivi
- Endpoint:
GET /marche/covid/statistiche/media-nuovi-positivi/:dataInizio/:dataFine
- Descrizione: Calcola la media mobile a 7 giorni dei nuovi positivi per l'intervallo specificato.
- Parametri URL:
dataInizio
edataFine
come sopra.
- Risposta:
- Formato: JSON
- Esempio:
[{ "data": "YYYY-MM-DD", "media_nuovi_positivi": 75.5 }, ...]
- Endpoint:
-
Tasso di Positività
- Endpoint:
GET /marche/covid/statistiche/tasso-positivita/:dataInizio/:dataFine
- Descrizione: Calcola il tasso di positività giornaliero (percentuale di test positivi sui test effettuati) per ogni giorno nell'intervallo specificato.
- Parametri URL:
dataInizio
edataFine
come sopra.
- Risposta:
- Formato: JSON
- Esempio:
[{ "data": "YYYY-MM-DD", "tasso_positivita": 5.5 }, ...]
- Endpoint:
- Endpoint:
GET /marche/covid/statistiche/tasso-letalita
- Descrizione: Restituisce il tasso di letalità complessivo (percentuale dei decessi sui casi totali) da inizio pandemia.
- Risposta:
- Formato: JSON
- Esempio:
{"tasso_letalita": 2.3}
Per ogni endpoint protetto, è necessario includere l'header Authorization
con il token JWT ottenuto dalla rotta di login.
Il servizio è stato messo online utilizzando Glitch, rendendolo accessibile da qualsiasi client HTTP capace di effettuare richieste ai suddetti endpoint.
Per iniziare ad interagire con il servizio, è necessario autenticarsi per ottenere un token JWT. Questo token sarà utilizzato per le successive richieste che richiedono autenticazione.
-
Richiesta di autenticazione:
POST /marche/covid/login Content-Type: application/json { "username": "admin", "password": "admin" }
-
Risposta(Token JWT)
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }
Dopo aver ottenuto il token, è possibile utilizzarlo per creare un nuovo rapporto.
Richiesta per creare un nuovo rapporto:
POST /marche/covid/rapporti-quotidiani
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
{
"data": "2024-02-15T17:00:00",
"..."
"nuovi_positivi": 3,
"dimessi_guariti": 732317,
"deceduti": 4555,
"..."
"totale_casi": 736812,
"tamponi": 3800801
"..."
}
- Risposta
"Rapporto creato con successo."
Per ottenere l'ultimo rapporto disponibile, inviare una richiesta GET (non necessita di autenticazione).
Richiesta:
GET /marche/covid/rapporti-quotidiani/ultimo
- Risposta
{ "data": "2024-02-07T17:00:00", "stato": "ITA", "codice_regione": 11, "denominazione_regione": "Marche", "lat": 43.61675973, "long": 13.5188753, "ricoverati_con_sintomi": 17, "terapia_intensiva": 1, "totale_ospedalizzati": 18, "isolamento_domiciliare": 0, "totale_positivi": 18, "variazione_totale_positivi": -7, "nuovi_positivi": 2, "dimessi_guariti": 732314, "deceduti": 4554, "casi_da_sospetto_diagnostico": null, "casi_da_screening": null, "totale_casi": 736886, "tamponi": 3800744, "casi_testati": 2798450, "note": null, "ingressi_terapia_intensiva": 0, "note_test": null, "note_casi": null, "totale_positivi_test_molecolare": 223416, "totale_positivi_test_antigenico_rapido": 513470, "tamponi_test_molecolare": 2020770, "tamponi_test_antigenico_rapido": 1779974, "codice_nuts_1": "ITI", "codice_nuts_2": "ITI3" }
Per ottenere il tasso di letalità complessivo, inviare una richiesta GET (non necessita di autenticazione).
Richiesta:
GET /marche/covid/statistiche/tasso-letalita
- Risposta
{ "tasso_letalita": 0.62 }