Federico Lelli / SchoolNode.js & Express
LEZIONE 27 · CRUD e architettura

API DELETE: eliminare

Prima di iniziare: le parole della lezione

findIndex e splice
findIndex trova la posizione di un elemento e restituisce -1 se manca. splice modifica l’array eliminando o inserendo elementi a partire da una posizione.
204 No Content
Risposta di successo senza body. Il client non deve tentare di leggerla come JSON.
Cancellazione logica
Alternativa alla rimozione fisica: si marca un record come eliminato e lo si esclude dalle normali letture, secondo le regole applicative.

DELETE rimuove una risorsa individuata normalmente da un ID. Evita di confondere l'ID pubblico con l'indice dell'array: possono essere diversi.

app.delete('/api/persone/:id', (req, res) => {
  const id = Number(req.params.id);
  const posizione = persone.findIndex(p => p.id === id);
  if (posizione === -1)
    return res.status(404).json({ errore: 'Non trovata' });
  persone.splice(posizione, 1);
  res.status(204).end();
});

Esempio aggiuntivo: dopo aver eliminato l'ID 1, gli altri ID non dovrebbero essere ricalcolati. 204 non ha body; 200 con una conferma JSON è un'alternativa.

Chi fa cosa, e perché

findIndex collega l’ID pubblico alla posizione corrente nell’array. Verifica sempre -1: chiamare splice(-1, 1) elimina l’ultimo elemento, anche se quello richiesto non esiste. Dopo la rimozione non ricalcolare gli ID dei sopravvissuti: i loro URL devono continuare a identificare le stesse persone.

Una seconda DELETE può ricevere 404 dopo che la prima ha ricevuto 204. Questo non contraddice l’idempotenza: in entrambi i casi lo stato finale desiderato è che la risorsa non esista. Alcune API scelgono 204 anche se il record è già assente: documenta la politica.

Un altro esempio guidato

// elimina.mjs — client Node per l'API del laboratorio attiva
const risposta = await fetch('http://localhost:3000/api/persone/1', {
  method: 'DELETE'
});
if (risposta.status === 204) {
  console.log('Eliminazione riuscita, nessun body da leggere');
} else {
  console.log('Status:', risposta.status, 'Risposta:', await risposta.text());
}

Come leggerlo e risultato atteso. Alla prima esecuzione ottieni normalmente 204. La seconda restituisce 404 e il messaggio dell’API, se il server non è stato riavviato. response.json() su una risposta 204 fallirebbe perché non c’è testo JSON da interpretare.

Prova tu. Elimina un ID intermedio e recupera gli altri. Verifica che un ID inesistente non causi la cancellazione accidentale dell’ultimo elemento.

Torna all’indice ↑

Materiali didattici curati e rielaborati da Federico Lelli. Le fonti e i riferimenti specifici sono indicati nei materiali disponibili.