/Progetto-OOP

Progetto per esame di Programmazione ad Oggetti A.A. 2020/2021 UNIVPM

Primary LanguageJava

SprigBoot REST API Domains

ITA

L' applicazione SpringBoot ha come obiettivo l'analisi e il monitoraggio dei domini presenti in rete. I dati relativi ai domini li otteniamo tramite la REST API Domains-Index.

Tra le funzioni di analisi abbiamo il filtraggio e il calcolo di statistiche.

L' utente, grazie al Client (ad esempio Postman), può accedere alle funzionalità dell'applicazione grazie al Web Service Tomcat integrato nel Framework Spring.

ENG

The SpringBoot application aims to analyze and monitor the domains present on the network. We obtain the data relating to the domains via the REST API Domains-Index.

Among the analysis functions we have the filtering and the calculation of statistics.

The user, thanks to the Client (for example Postman), can access the application functionalities thanks to the Web Service Tomcat integrated into the Framework Spring.

Plus del programma ➕

✅ Personalizzazione dei parametri durante la richiesta all'API

✅ Backup dei dati da locale in caso di url corrotto

✅ Filtri multipli e sovrapponibili

✅ Testing JUNIT


Rotte Applicazione 🌐

Tipo Rotta Descrizione
GET /domains Effettua l'analisi su un gruppo di domini.
GET /stats Calcola la statistica su un gruppo di domini.
POST /filter Effettua il filtraggio dei domini rispettando le condizioni specificate nel body della richiesta.

Parametri

Nelle rotte è possibile inserire dei parametri del tipo "domain" e "zone" per definire il gruppo di domini. Di default i campi saranno riempiti con "domain" = "facebook" e "zone" = "com".

  • Esempio di chiamata con parametri non di default "domain" = "google" e "zone" = "it". parametri

GET /domains

Modello

{
"name": "your-facebook-address.com",
"createDate": "2020-07-25T06:07:00.044377",
"updateDate": "2020-07-25T06:07:00.044380",
"country": "US",
"isDead": "False"
}

Il JSON sopra riportato indica la rappresentazione utilizzata per indicare un dominio. I campi rappresentano:

  1. name = nome.
  2. createDate = data creazione.
  3. updateDate = data ultimo update.
  4. country = paese di hosting.
  5. isDead = scadenza.

Risultato chiamata su Postman

esempio_domains Il programma restituisce i domini elaborati sotto forma di un JSONArray.

GET /stats

Modello

{
  "Host countries": {
    "DE": 3,
    "null": 27,
    "JP": 7,
    "IT": 0,
    "US": 11,
    "NL": 1,
    "TR": 1,
    "altro": 0
  },
  "Keywords": {
    "marketing": 1,
    "pages": 2,
    "business": 3,
    "login": 1,
    "vacances": 1,
    "altro": 42
  },
  "Average update time(days)": 150.0,
  "Average life time(days)": 150.0,
  "Quantity": 50
}

Il JSON sopra riportato indica la rappresentazione utilizzata per indicare le statistiche elaborate su un gruppo di domini. I campi rappresentano:

  1. Host countries = nazioni di hosting.
  2. Keywords = parole chiave più comuni.
  3. Average update time(days) = media dei giorni trascorsi dall'ultimo update.
  4. Average lifetime(days) = media dei giorni trascorsi dalla creazione.
  5. Quantity = numero di domini analizzati.

Risultato chiamata su Postman

esempio_stats Il programma restituisce le statistiche elaborate sotto forma di un JSONObject.

POST /filter

Modello

{
  "name":"xn;cash;business",
  "country":"US;DE;IT",
  "createDate": "2020-07-25T05",
  "updateDate": "T05",
  "isDead":"false"
}

Il JSON sopra riportato indica la rappresentazione utilizzata nel body per indicare i filtri da applicare su un gruppo di domini. I campi rappresentano:

  1. name = una o più sottostringhe contenute nei domini.
  2. country = uno o più nazioni di hosting.
  3. createDate = data creazione.
  4. updateDate = data ultimo update.
  5. isDead = scadenza.

I campi name e country permettono di ospitare più valori contemporaneamente. Questi valori verranno applicati come filtri con logica OR. I campi restanti, invece, come createDate, updateDate e isDead, possono contenere solo un valore.

I valori relativi a campi differenti vengono applicati come filtri con logica AND.

Condizioni da rispettare

  • I valori dei campi name,country e isDead possono essere indicati indifferentemente con maiuscole o minuscole, gli altri no.
  • I valori dei campi name e country devono essere separati da ";", senza spazi.
  • Le date nei domini hanno una formattazione del tipo aaaa-mm-ggTore:minuti:secondi:millisecondi quindi i valori inseriti nei campi createDate e updateDate devono rispettarla. E' possibile tuttavia inserire delle sottostringhe (es: "createDate":"mm-ggTore" oppure "updateDate":"Tore:minuti").

Risultato chiamata su Postman

esempio_filter


Eccezioni ❌

Il programma può lanciare eccezioni standard e personalizzate

Eccezioni personalizzate:

  • NoDataException

    Viene richiamata quando il programma riconosce che il vettore domains non contiene alcun dominio. Viene visualizzato il seguente messaggio di errore:

    I CAMPI DELLA RICHIESTA NON PRODUCONO ALCUN RISULTATO...
    Riprova con diversi campi domain e zone!`
  • NoBodyException

    Viene richiamata quando il programma ottiene in input un body vuoto. Viene visualizzato il seguente messaggio di errore:

    IL BODY DELLA CHIAMATA POST NON CONTIENE NESSUN FILTRO

Eccezioni standard:

  • Exception
    • IOException
      • FileNotFoundException
    • RuntimeException
      • ArithmeticException
      • PatternSyntaxException
      • ClassCastException
    • ParseException

UML 📊

Use Case Diagram

OOpUseCaseDiagram


Class Diagram

OOPClassDiagram

(CONTROLLER)OOPClassDiagram-Controller (EXCEPTION)OOPClassDiagram-Exception

OOPClassDiagram-Filters

OOPClassDiagram-Model

OOPClassDiagram-Stats


Sequence Diagram

/domains

OOPSequenceDiagram-Domains

/filter

OOPSequenceDiagram-Filters

/stats

OOPSequenceDiagram-Stats


Test JUNIT ⚠️

Nel programma è presente anche una sezione di testing:

  • Test 1

    Verifica che il vettore domains non sia null.

  • Test 2

    Verifica se il filtro FilterCountry viene correttamente applicato.

  • Test 3

    Verifica se le statistica Quantity viene correttamente calcolata.

  • Test 4

    Verifica se l'eccezione NoDataException viene lanciata correttamente.

Autori 🙈 🙉 🙊

Nome LinkedIn Contributo
Paolo Beci Link 33,3%
Emilio Grieco Joseph Link 33,3%
Giuseppe Izzi Link 33,3%