Kodokon kodokon.com

Construir una API REST

Diseña una API REST limpia con los métodos HTTP correctos, los códigos de estado adecuados y la validación de los cuerpos de las peticiones.

9 min · 3 preguntas

Abrir esta lección en Kodokon

Una API REST expone recursos (usuarios, tareas, pedidos) que se manipulan con métodos HTTP: GET para leer, POST para crear, PUT o PATCH para actualizar, DELETE para eliminar. La convención profesional: sustantivos en plural, nunca verbos en las URL. Escribes POST /tasks, no /createTask. Vamos a construir una pequeña API de tareas, en memoria por ahora.

JAVASCRIPT
import express from "express";

const app = express();
app.use(express.json());

const tasks = [
  { id: 1, title: "Review the module", done: false }
];

app.get("/tasks", (req, res) => {
  res.json(tasks);
});

app.listen(3000);

La línea app.use(express.json()) es esencial: sin ella, req.body es undefined para cualquier petición JSON. Al crear, valida siempre la entrada, responde con 201 y devuelve el recurso creado: esto permite al cliente recuperar el id generado por el servidor.

JAVASCRIPT
app.post("/tasks", (req, res) => {
  const { title } = req.body;
  if (!title) {
    return res.status(400).json({
      error: "The title field is required"
    });
  }
  const task = {
    id: tasks.length + 1,
    title,
    done: false
  };
  tasks.push(task);
  res.status(201).json(task);
});

Memoriza los códigos que usarás a diario: 200 lectura o actualización con éxito, 201 recurso creado, 204 éxito sin contenido (eliminación), 400 petición inválida, 404 recurso no encontrado, 500 error del servidor. La regla: con 4xx, el cliente se equivocó; con 5xx, es tu código el que falló.

JAVASCRIPT
app.delete("/tasks/:id", (req, res) => {
  const id = Number(req.params.id);
  const index = tasks.findIndex((t) => t.id === id);
  if (index === -1) {
    return res.status(404).json({
      error: "Task not found"
    });
  }
  tasks.splice(index, 1);
  res.status(204).end();
});

Prueba de conocimientos

Comprueba que has retenido los puntos clave de esta lección.

  1. ¿Qué código de estado devuelves tras crear un recurso con éxito?
    • 200
    • 201
    • 204
    • 301
  2. ¿Sin qué línea req.body permanece undefined en una petición JSON?
    • app.use(express.json())
    • app.use(express.static(...))
    • app.listen(3000)
  3. Un cliente envía un POST sin el campo obligatorio title. ¿Cuál es la reacción correcta de la API?
    • Crear el recurso con un título vacío
    • Devolver un estado 400 con un mensaje de error
    • Devolver un estado 500
    • Ignorar la petición sin responder