Creare con POST
Fa parte della sezione API REST del percorso Node.js di Coddy. Lezione 2 di 25.
Un client che aggiunge un'attività deve sapere dove si trova la nuova attività. Invia la nuova risorsa all'URL dell'elenco con POST e il server risponde 201 Created con la risorsa e un'intestazione Location che indica il suo URL.
POST /api/events { "name": "Launch party" }
201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }Il server sceglie l'id, quindi due client non possono mai rivendicare lo stesso. Con l'intestazione Location, il client può recuperare il nuovo evento senza creare da sé l'URL. res.location(path) imposta quell'intestazione e si concatena come res.status:
res.status(201).location(`/api/events/${event.id}`).json(event);Sfida
FacileI client hanno bisogno di un modo per aggiungere attività. Aggiungi una route POST che crea un’attività e indica al client dove si trova la nuova attività.
- In
routes/tasks.js, aggiungi una route perPOST /api/tasks(all’interno del router, il percorso è'/'). Leggetitledal corpo JSON, per esempio{ "title": "Order new chairs" }. - Crea la nuova attività con quattro campi:
id: ottenuto dalla funzionenextId()instore.js. Importala insieme atasks.title: ottenuto dal corpo.done:false.createdAt:new Date().toISOString(), l’ora corrente in formato testuale.
Aggiungila all’array
tasks, così verrà mostrata anche daGET /api/tasks. - Rispondi con lo stato 201 e la nuova attività in formato JSON. Imposta l’intestazione
Locationsull’URL dell’attività: per l’attività 4 è/api/tasks/4. In una nuova esecuzione, il corpo della risposta sarà simile a questo (il tuocreatedAtcorrisponderà al momento in cui la invii):{ "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" } - Se il corpo non contiene
title, rispondi con lo stato 400 e{ "error": "title is required" }e non aggiungere nulla all’elenco.
Prova: scegli POST, percorso /api/tasks, corpo { "title": "Order new chairs" }. Dovresti vedere 201 e l’attività riportata sopra con id 4; nella scheda Headers della risposta compare Location: /api/tasks/4. Invia GET /api/tasks/4: riceverai la stessa attività. Poi invia POST {} a /api/tasks: riceverai 400 con l’errore e GET /api/tasks continuerà a mostrare 4 attività, perché la richiesta POST rifiutata non ha aggiunto nulla.
Provalo tu
import { Router } from 'express';
import { tasks } from '../store.js';
const router = Router();
router.get('/', (req, res) => {
res.json(tasks);
});
router.get('/:id', (req, res) => {
const task = tasks.find((t) => t.id === Number(req.params.id));
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
res.json(task);
});
export default router;
Tutte le lezioni di API REST
1Risorse e verbi
Risorse e URLCreare con POST4Browser, versioni e configurazione
Che cos'è un'origineConsentire un'altra origineCORSUna pagina che chiama l'APIEsercitati da solo: Playground Express