Menu
CoddyTech

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);
challenge icon

Sfida

Facile

I 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à.

  1. In routes/tasks.js, aggiungi una route per POST /api/tasks (all’interno del router, il percorso è '/'). Legge title dal corpo JSON, per esempio { "title": "Order new chairs" }.
  2. Crea la nuova attività con quattro campi:
    • id: ottenuto dalla funzione nextId() in store.js. Importala insieme a tasks.
    • title: ottenuto dal corpo.
    • done: false.
    • createdAt: new Date().toISOString(), l’ora corrente in formato testuale.

    Aggiungila all’array tasks, così verrà mostrata anche da GET /api/tasks.

  3. Rispondi con lo stato 201 e la nuova attività in formato JSON. Imposta l’intestazione Location sull’URL dell’attività: per l’attività 4 è /api/tasks/4. In una nuova esecuzione, il corpo della risposta sarà simile a questo (il tuo createdAt corrisponderà al momento in cui la invii):
    { "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" }
  4. 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

Esercitati da solo: Playground Express