Hoy · Hoja de ruta
- 1. Aprende: La diferencia entre reemplazar y modificar, y cómo se borra bien.
- 2. Haz: Completa el CRUD de tu recurso.
- 3. Comprueba: Repetir una operación no produce efectos distintos.
Antes de empezar · 5 minutos, sin apuntes
- Si envías solo el precio, ¿qué debería pasar con los demás campos?
- ¿Qué responde un borrado de algo que ya no existe?
- ¿Qué pasa si dos personas modifican el mismo producto a la vez?
PUT y PATCH
| Método | Significa | Cuerpo |
|---|---|---|
| PUT | Reemplaza el recurso entero | Todos los campos |
| PATCH | Modifica los campos enviados | Solo los que cambian |
// PUT: lo que no llega, se pierde
const reemplazo = validarProductoNuevo(peticion.body);
const actualizado = await servicio.reemplazar(id, reemplazo);
// PATCH: se combina con lo que había
const cambios = validarCambios(peticion.body); // ninguno obligatorio
const actualizado = await servicio.modificar(id, cambios);
El error clásico es implementar PUT combinando los campos: entonces tienes dos rutas que hacen lo mismo y un contrato que miente. Si solo vas a ofrecer una, ofrece PATCH y dilo en el contrato.
Borrar
const borrado = await servicio.borrar(id);
if (!borrado) throw new ErrorNoEncontrado("Producto no encontrado");
respuesta.status(204).end();
Un 204 no lleva cuerpo: la operación ha ido bien y no hay nada que devolver. Sobre el segundo borrado existen dos posturas defendibles —404 porque ya no está, o 204 porque el resultado deseado se cumple— pero elige una y escríbela en el contrato.
Modificaciones que se pisan
Leer, modificar y guardar no es una operación indivisible
Dos peticiones que llegan casi a la vez leen la misma versión del fichero, cada una aplica su cambio y la segunda escribe encima: el cambio de la primera desaparece sin que nadie se entere.
Con un fichero y poco tráfico es improbable, pero conviene saber nombrarlo. Se resuelve con una versión en el recurso, que el cliente devuelve al modificar: si no coincide, el servidor responde 409 en lugar de pisar. Es el mismo problema que en el módulo de servidor se resuelve con transacciones.
Tarea 6 · El CRUD cerrado
- Implementa PATCH con validación de los campos enviados.
- Decide si ofreces PUT; si lo haces, que reemplace de verdad.
- Implementa DELETE con 204 y su comportamiento documentado.
- Comprueba que repetir PATCH y DELETE no produce efectos distintos.
- Actualiza
peticiones.httpcon todos los casos nuevos. - Añade una fecha de modificación que el servidor mantiene.
Cierre de la semana 2
- Las cinco operaciones funcionan según tu contrato.
- Toda entrada se valida antes de tocar los datos.
- Cada operación devuelve el código y el cuerpo acordados.
- Tu fichero de peticiones cubre también los casos que fallan.
Ver respuestas
1 · Con PUT se pierden; con PATCH se conservan.
2 · Un 204 sin cuerpo, si se borró.
3 · Que la segunda escritura pise a la primera sin que nadie lo note.
Microprueba semanal 2 · 5–10 minutos
Individual, sin IA y sin apuntes.
/api/productos?max=abcy/api/productos?categoria=inexistente: qué código devuelve cada uno y por qué.- Explica qué es una lista blanca de campos y qué evita.
- Diferencia entre PUT y PATCH, con un ejemplo de tu proyecto.