Skip to content

Architettura Back end

LucaZanella edited this page Dec 4, 2017 · 1 revision

Le funzionalità del back-end sono suddivise in diversi moduli, ciascuno dei quali compie una parte di elaborazione necessaria per soddisfare le richieste provenienti dal client. Abbiamo due moduli principali:

  • HttpDispatcher
  • ApplicationHandlerSkeleton

Gli altri moduli sono stati suddivisi in delle cartelle specifiche:

  • database contiene i moduli che forniscono astrazioni che permettono l’accesso ai dati in maniera indipendente dalla rappresentazione sottostante
  • API contiene i moduli che si occupano di gestire le richieste provenienti dalle api
  • bot telegram contiene i moduli che si occupano di gestire le richieste provenienti dal bot telegram
  • web interface contiene i moduli che si occupano di gestire le richieste provenienti dall’interfaccia web
  • common contiene alcuni moduli utilizzati congiuntamente dagli altri moduli per la gestione degli errori o per funzionalità legate al tempo

HttpDispatcher

E' il modulo in cui giungono tutte le richieste provenienti dai client. Si occupa di fare il routing delle varie richieste al fine di individuare l'handler incaricato della gestione. Nel caso in cui giunga una richiesta che richiede un URL in cui non è presente alcuna risorsa allora visualizza una pagina di errore.

ApplicationHandlerSkeleton

E' il modulo che tutte le classi handler estendono. In particolare questa classe contiene 3 diversi metodi, ereditati da tutte le sottoclassi, che vengono utilizzati per il processamento della richiesta:

  • dispatch metodo che si occupa di richiamare il metodo per la pre-elaborazione della richiesta, il metodo per la gestione dell'errore e il metodo di elaborazione vera e propria della richiesta
  • processRequest metodo di cui viene effettuato l'override in ciascuna sottoclasse e che si occupa dell'elaborazione vera e propria della richiesta
  • processFailure metodo di cui viene effettuato l'override in ciascuna sottoclasse e che si occupa della gestione dell'errore

Gestione della richiesta

A ciascuna richiesta è associata una coppia di moduli preprocessore-handler.

  • preprocessore è la classe incaricata della pre-elaborazione della richiesta. Contiene un unico metodo: parseAndValidate. Questo metodo si occupa di verificare che la richiesta proveniente dal client sia ben formata e che contenga tutti gli attributi necessari all'elaborazione. Nel caso in cui venga individuato un errore il metodo parseAndValidate restituisce uno specifico oggetto errore, altrimenti restituisce un oggetto attribute che verrà poi utilizzato dall'handler per l'elaborazione.
  • handler è la classe incaricata dell'elaborazione vera e propria della richiesta. Estende la classe ApplicationHandlerSkeleton dalla quale eredita 3 metodi: dispatch, processRequest e processFailure. Il metodo processFailure viene invocato nel caso in cui il preprocessore abbia individuato un errore e ha il compito di restituire al client una risposta http contenente lo stato dell'errore e una descrizione dello stesso. Il metodo processRequest viene invece invocato nel caso in cui la richiesta sia ben formata e ha il compito di restituire al client una risposta http contenente tutto il necessario per soddisfare la richiesta.

Il flusso seguito è il seguente

reqresflow