API DELETE: eliminare
Prima di iniziare: le parole della lezione
- findIndex e splice
findIndextrova la posizione di un elemento e restituisce -1 se manca.splicemodifica 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.