Il progetto sfrutta le API libere di NewYorkTimes e Google Books per recuperare delle liste di libri dal primo, e arricchirle con il link alla preview recuperato dal secondo servizio.
Il progetto usa Nodejs ed è scritto in Typescript.
All'interno della directory src troviamo:
routes: Qui vengono definiti i path dei nostri endpoint e associati al metodo della classe BookController
controller: Contiene tutte le definizioni dei controller (in questo caso solo BookController)
services: Contiene i servizi per interrogare le API di NYT e GBOOKS. Sfruttano l'approccio Singleton: ad ogni richiesta di un istanza, se già inizializzata, viene sfruttata la stessa istanza.
utils: Contiene una serie di funzionalità di utilità: definizioni dei tipi, convertitori di tipi, definizioni di errori custom.
Il backend richiede un file .env sul modello del file incluso .env.sample. Il file .env contiene i due base url per i servizi (già inclusi nell'env.sample) e una chiave API per NYT.
Per avviare il backend sono forniti i seguenti script:
Il comando principale per avviare il server.
Il comando per buildare ts
Per poter sfruttare la comodità di nodemon in modalità sviluppo con TS, ho concatenato lo script che controlla le variazioni del sorgente in TS, e Nodemon per riavviare il server ad ogni modifica del JS compilato
Lanciare dunque con yarn dev oppure npm dev
Sono esposti due endpoint principali, più uno per un semplice check sullo status del server.
Nel repositori è incluso anche il file Books-API.postman_collection, che contiene una configurazione pronta per testare le API con Postman.
Endpoint n.1 Non prende alcun parametro e restituisce tutte le liste di libri dall'archivio NYT
Endpoint n.2 Prende come parametro obbligatorio la lista dei libri da recuperare, come parametro facoltativo il periodo di pubblicazione (default current) Restituisce i libri della lista richiesta arricchiti con la preview da GBooks