⊗jsrxPmSDCl 44 of 57 menu

Client per l'applicazione in Redux

Nelle lezioni precedenti abbiamo praticamente completato la parte server per la nostra applicazione, la integreremo leggermente secondo necessità nelle prossime lezioni. Ora dobbiamo creare un client per l'applicazione, che invierà richieste HTTP al server.

Apriamo la nostra applicazione con i prodotti e nella cartella api creiamo il file client.js. Per iniziare, scriveremo la funzione client, che funzionerà sia per le richieste GET che per quelle POST. Riceverà come parametri il percorso, il tipo e il corpo della richiesta (nel caso POST), se presente:

export async function client(url, method, body = {}) {}

Successivamente, dobbiamo formare l'oggetto options, in cui passeremo varie informazioni per la richiesta. Questo sarà il tipo di richiesta e gli headers:

export async function client(url, method, body = {}) { const options = { method: method, headers: { 'Content-Type': 'application/json', }, } }

La proprietà body per noi è opzionale, dovremmo passarla solo se abbiamo una richiesta POST. Per farlo, all'interno di client, dopo il codice per l'oggetto options, lo aggiungeremo a options con il corpo della richiesta in formato JSON, se il metodo scelto è POST:

if (method === 'POST') { options.body = JSON.stringify(body) }

Poi, più avanti nel codice di client, organizzeremo un blocco try, nella prima riga del quale, utilizzando fetch, otterremo una risposta dal server. In caso di fallimento, tradizionalmente restituiremo una promessa con un errore:

let data try { const response = await window.fetch(url, options) } catch (err) { return Promise.reject(err.message ? err.message : data) }

Ora completiamo il codice nel blocco try. Dopo aver ottenuto response, dobbiamo elaborarla. Estrarremo da essa i dati in JSON e se lo stato della risposta ci segnala che tutto è a posto, allora restituiremo un oggetto con i dati e le informazioni: stato, headers e indirizzo. Se invece lo stato non è 'ok', allora lanceremo un'eccezione con il testo dello stato:

try { const response = await window.fetch(url, options) data = await response.json() if (response.ok) { return { status: response.status, headers: response.headers, url: response.url, data, } } throw new Error(response.statusText) }

Il codice per la funzione client è pronto, resta solo da scrivere come funzioneranno i nostri metodi GET e POST quando vengono chiamati. Scriviamo il codice per loro dopo la funzione client. Il metodo client.get riceverà come parametro il percorso e chiamerà la funzione client, passandole questo percorso e il tipo di richiesta GET:

client.get = (url) => client(url, 'GET')

E client.post dovrà passare a client il percorso, il tipo di richiesta POST e il corpo della richiesta:

client.post = (url, body) => client(url, 'POST', body)

Questo è tutto, il nostro piccolo client è pronto per lavorare con il server.

Aprite la vostra applicazione con gli studenti, create al suo interno nella cartella api il file client.js. Dopo aver preso visione dei materiali della lezione, scrivete (copiate) il codice della funzione client e dei suoi due metodi client.get e client.post.

uzcshyhiro