Un Web Service è un sistema software in grado di mettersi al servizio di un Client (applicazione, sito web, Postman), comunicando tramite il protocollo HTTP. Un Web service consente quindi agli utenti che vi si collegano di usufruire delle funzioni che mette a disposizione. Con Spring Boot, è stato possibile creare questo software che lancia l'intera applicazione web, compreso il web server integrato.
Il Data-set rappresenta la provenienza dei turisti che hanno visitato la regione Lazio o le sue provincie (es. Viterbo). I turisti sono catalogati per paese di residenza (es. Italia) e regione geografica di residenza (es. Unione Europea). I dati sono registrati in Esercizi Alberghieri (arrivi e presenze), Esercizi Complementari (arrivi e presenze) e Totale Esercizi Ricettivi (arrivi e presenze).
La nostra applicazione permette di richiedere mediante API REST (GET o POST) con rotte distinte:
- Restituzione dei metadati, formato JSON, ovvero l’elenco degli attributi, alias degli stessi e tipo di dati contenuti.
- Restituzione dei dati riguardanti ogni record, formato JSON.
- Restituzione dei dati riguardanti record filtrati, formato JSON.
- Restituzione delle statistiche sui dati di uno specifico campo.
- Restituzione delle statistiche sui dati di uno specifico campo, su record filtrati.
note: come effettuare richieste.
Usando l'ide eclipse si possono seguire i seguenti passi:
- aprire eclipse, nella Show view premere il pulsante "clone a Git Repository".
- nella finestra che appare, incollare URL di questa repository nella casella URI e procedere.
- recarsi nel clone della repository che apparirà, tasto destro quindi Import Project (verificare che sia importato come progetto Maven) e procedere.
- a questo punto potete provare ad eseguire il codice, selezionando "nome_Progetto" tasto destro, "Run as" e quindi "Sprign boot App".
In alternativa su linux senza l'utilizzo del ide eclipse si puo scaricare il file Zip ed estrarlo, da terminale recarsi nella directory, digitare il comando mvn clean install
se il BUILD avrà suceccesso, all'interno del progetto nella directory target si troveranno i file compilati. Per eseguire il programma java -jar target/nomeProgettoCompilato.jar
(oppure mvn spring-boot:run
).
Ora l'aplicazione Web Service sarà attiva e in ascolto alla porta http://localhost:8080.
Per eseguire le richieste GET o POST si può installare un API testing, (ad esempio: Postman). La seguente tabella mostra le richieste possibili.
TIPO | rotta | descrizione |
---|---|---|
GET | /metadata | restituisce gli alias utilizzati |
GET | /data | restituisce l'intero dataset |
GET | /stats?field="nome" | restituisce una statistica sul "nome" specificato fatta sull'intero dataset. |
POST | /data | restituisce i record che rispettano i filtri specificati nel body della richiesta |
POST | /stats?field="nome" | restituisce una statistica sul "nome" specificato basandosi sui record che rispettano i filtri specificati nel body della richiesta |
La segunete tabella mostra i filtri disponibili
Nome operatore | Descrizione | Esempio |
---|---|---|
Greater | maggiore (valido per campi numerici) | {"EsAlbArr":{"Greater":100000}} |
Less | minore (valido per campi numerici) | {"EsAlbArr":{"Less":100000}} |
Included | compreso tra (valido per campi numerici) | {"EsAlbArr":{"Included":[100,5000]}} |
NotIncluded | non compreso tra (valido per campi numerici) | {"EsAlbArr":{"NotIncluded":[100,5000]}} |
In | trova una corrispondeza con i valori dell'array (valido per stringhe) | {"ProvDest":{"In":["Roma"]}} |
Nin | non trova una corrispondeza con i valori dell'array (valido per stringhe) | {"ProvDest":{"Nin":["Roma","Viterbo"]}} |
Inoltre è possibile combinare più filtri, per fare questo, è sufficiente specificare il modo in cui si vogliono combinare i fitlri utilizzati: and oppure or prima dell'operatore, utilizzando il comando "type". Ad esempio il filtraggio seguente selezionarà i record che hanno EsAlbPres compreso tra 10 e 1000 ma abbiano anche nel campo ProvDest Roma:
{ "EsAlbPres":{"Included":[10,1000]}, "ProvDest":{"type":"and","In":["Roma"]} }
note: è possibile inserire un filtro per ogni campo contemporaneamente, concatenati nel modo desiderato(and/or).
- Package com.esame.controller
- Package com.esame.database
- Package com.esame.model
- Package com.esame.service
- Package com.esame.exception
- Package com.esame.util.filter
- Package com.esame.util.statistics
- Chiamata GET /metadata
ControllerClass esegue una chiamata tramite il metodo
getArrayMetadata
, il quale inizializza un ArrayList di metadata e lo restituisce. ControllerClass trasforma quest ultimo in Json e lo ritorna al client.
- Chiamata GET /data
ControllerClass esegue una chiamata tramite il metodo
getRecords
, il quale restituisce l'intero ArrayList di Record. ControllerClass trasforma quest ultimo in Json e lo ritorna al client.
- Chiamata POST /data
ControllerClass esegue una chiamata tramite
jsonParserColumn
alla classe JsonParser, che insieme ajsonParserOperator
effetueranno il parsing del body ricevuto in modo ciclico. Estrapolate le informazioni relative al filtraggio richiesto, verranno utilizzate dainstanceFilter
per istanziare nuovi oggetti filtro prendedoli della classi contenute nel package com.esame.util.filter. A questo punto tramiterunFilter
si potrà eseguire il filtraggio e restituire a ControllerClass l'Arraylist di Record filtrato da consegnare al Client in formato Json.
- Chiamata GET /stats?field="nome"
L'arrayList di Record sul quale fare il calcolo delle statisctiche viene ottenuto nel modo spiegato nella richiesta GET /data.
Viene passato il nome del campo su cui si desidera effettuare la statistica a
instanceStatsCalculator
, il quale instanzia l'oggettoStasCalculator
corretto dalle classi contenute nel package com.esame.util.statistics. Quest'ultimo tramite il metodorun
eseguirà il calocolo statistico che verrà incapsulato come oggetto stats, e restituito in formato Json al client
- Chiamata POST /stats?field="nome" L'arrayList di Record sul quale calcolare le statisctiche viene ottenuto nel modo spiegato nella richiesta POST /data. Il calcolo statistico viene eseguito come spiegato nella richiesta GET /stats?field="nome"
- Eclipse - ambiente di sviluppo integrato
- Spring Boot - framework per sviluppo applicazioni Java
- Maven - strumento di gestione di progetti