Parliamo

project-cherry.dev

Intermedio15 min

Fetch API

Comunicare con server e API REST usando la Fetch API nativa del browser.

Fetch API

La Fetch API è lo strumento nativo del browser per fare richieste HTTP. Sostituisce il vecchio XMLHttpRequest con un'interfaccia basata su Promises, pulita e moderna.

Richiesta GET

javascript
async function ottieniUtenti() {
  const risposta = await fetch("https://api.esempio.it/utenti");

  if (!risposta.ok) {
    throw new Error(\`Errore HTTP: \${risposta.status}\`);
  }

  const utenti = await risposta.json();
  return utenti;
}

Attenzione: fetch non lancia un errore per risposte 4xx o 5xx — devi controllare risposta.ok manualmente.

Richiesta POST

javascript
async function creaUtente(dati) {
  const risposta = await fetch("https://api.esempio.it/utenti", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(dati),
  });

  return await risposta.json();
}

creaUtente({ nome: "Luca", email: "luca@esempio.it" });

Gestione errori robusta

javascript
async function chiamaAPI(url) {
  try {
    const risposta = await fetch(url);

    if (!risposta.ok) {
      const errore = await risposta.json();
      throw new Error(errore.messaggio || "Errore sconosciuto");
    }

    return await risposta.json();
  } catch (errore) {
    if (errore.name === "TypeError") {
      console.error("Errore di rete:", errore.message);
    } else {
      console.error("Errore API:", errore.message);
    }
    throw errore;
  }
}

Annullare una richiesta

javascript
const controller = new AbortController();

fetch("/api/dati", { signal: controller.signal })
  .then(r => r.json())
  .catch(e => {
    if (e.name === "AbortError") console.log("Richiesta annullata");
  });

// Annulla dopo 5 secondi
setTimeout(() => controller.abort(), 5000);

L'AbortController è fondamentale per annullare richieste quando l'utente naviga via dalla pagina o cambia i filtri di ricerca.