CRUD en Strapi

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.

Crear un registro en Strapi

Primero intentamos con los datos básicos que hemos definido en el Content Type Builder:

content type builder strapi

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 el JWT 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 variable data.
crud en strapi

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 .
enviar datos a strapi

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 .
leer registros en strapi

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.


Posted

in

, , , , , , ,

by