Un CRUD en Strapi (Create, Read, Update y Delete) es un ejercicio muy simple en el que ejecutamos las operaciones básicas para cualquier sistema, es decir, crear un registro, leer uno o muchos registros, actualizar información y borrarla.
Como ejemplo, en este post usaremos nuestro tipo de contenido “Producto” y usaremos la API general que en este post o nos podemos autenticar como un usuario y enviar el JWT
.
CRUD en Strapi
Crear un registro en Strapi
Primero intentamos con los datos básicos que hemos definido en el Content Type Builder:
Hacemos el request a nuestro server:
curl -X POST \
--no-progress-meter \
http://localhost:1337/api/productos \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
-H 'Content-Type: application/json' \
-d '{
"data":{
"Nombre": "Impresora HP",
"Estado": true,
"Tipo": "Físico"
}
}' | jq .
Desglosemos los datos enviados:
- URL será
http://localhost:1337/api/productos
-H "Authorization: bearer <TOKEN>
: usaremos el token general o elJWT
generado en nuestra autenticación (recodemos activar el permiso en Settings >> USERS & PERMISSIONS >> Roles).-H 'Content-Type: application/json'
: formato en que le enviaremos nuestra request.-d ...
: son los campos del producto bajo la variabledata
.
Pero vemos un error. Nos dice ValidationError
.
Esto es porque el precio del producto fue marcado como required
. y debemos enviarlo obligatoriamente.
Modificamos nuestro payload para agregar el Precio
con los dos valores:
curl -X POST \
--no-progress-meter \
http://localhost:1337/api/productos \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
-H 'Content-Type: application/json' \
-d '{
"data":{
"Nombre": "Impresora HP",
"Estado": true,
"Tipo": "Físico",
"Precio":{
"PrecioRegular":1200.00,
"PrecioDescuento":999.00
}
}
}' | jq .
Ahora sí nos acepta el registro y nos devuelve datos adicionales como el id
y las fechas de creación y publicación.
Leer registros en Strapi
Ahora vamos a listar los productos que ya hemos registrado, incluyendo el último. Aquí podemos jugar con los filtros que ya vimos en otro post.
curl -X GET \
--no-progress-meter \
http://localhost:1337/api/productos \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" | jq .
Actualizar un registro en Strapi
Actualicemos un registro ahora.
curl -X PUT \
--no-progress-meter \
http://localhost:1337/api/productos/5 \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
-H 'Content-Type: application/json' \
-d '{
"data":{
"Nombre": "Impresora HP EDITED",
"Precio":{
"PrecioRegular":1200,
"PrecioDescuento":859.00
}
}
}' | jq .
Aquí es muy parecido a crear un registro, pero ahora usaremos el método PUT
en lugar de POST
y la url ahora será /api/productos/<ID>
. También enviaremos solamente los campos que queremos modificar.
Si revisamos el panel de Strapi, veremos que el producto ha sido modificado correctamente.
Borrar un registro en Strapi
Podemos borrar los registros en Strapi de manera lógica o de manera física. La primera solo nos cambia el status del producto y no lo mostrará a menos que lo indiquemos de manera explícita. Con la física no hay vuelta atrás, una vez eliminado se habrá ido para siempre.
Borrado físico
Ahora usaremos el método DELETE
para hacerlo y el formato de la URL que usamos para actualizar, indicando el ID
del producto.
curl -X DELETE \
--no-progress-meter \
http://localhost:1337/api/productos/7 \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" | jq .
Listo, el producto ha sido eliminado para siempre.
Borrado lógico
El borrado lógico consiste en cambiar el estatus de Published
a Draft
.
Para establecer solo el status en DRAFT
sin borrarlo físicamente:
curl -X PUT \
--no-progress-meter \
http://localhost:1337/api/productos/5 \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
-H 'Content-Type: application/json' \
-d '{"data": { "publishedAt": null}}' | jq .
Como vemos, en data
enviamos publishedAt
como null
y de nuevo, el formato de URL de actualizar, porque es lo que estamos haciendo, enviando el ID
del producto.
Con esto el registro queda anulado temporalmente, hasta que lo volvamos a activar.
Activar registro
Cuando un registro está con el status Draft
y queremos volverlo a publicar, lo haremos así:
curl -X PUT \
--no-progress-meter \
http://localhost:1337/api/productos/5 \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
-H 'Content-Type: application/json' \
-d '{"data": { "publishedAt": "2024-03-23T19:40:12.127Z"}}' | jq .
De nuevo, usamos PUT
y publishedAt
con una fecha válida en el formato este.
Con esto completamos los métodos comunes de un CRUD en Strapi.
Gracias por leer.