En los post anteriores ya vimos cómo crear información y cómo activar la API en Strapi, además de obtener información. Sin embargo, algo vital cuando consultamos información es poder filtrar información, paginar y ordenar los datos. Ahora aprenderemos cómo filtrar datos en Strapi.
Ordenar datos en Strapi
Una acción común cuando recuperamos datos de una API es ordenar esta información según qué campos necesitemos.
El ordenamiento se puede combinar con las variantes que ya vimos en el post anterior. En este caso solo vamos a obtener el campo Nombre
de nuestro modelo Productos
para verlo mejor.
Los posibles valores son asc y desc, por default es asc.
El formato es:
&sort[0]=Nombre:desc
&sort[0]=Nombre:asc
&sort[0]=Nombre:desc&sort[1]=Tipo:asc
Construimos una llamada para probar:
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?fields[0]=Nombre&sort[0]=Nombre:desc --globoff | jq .
Acá ya vemos ordenados los datos por el campo Nombre
.
Paginar datos
También podemos “paginar” la información mediante el parámetro pagination
y sus dos posibles valores:
page
: página que quiero ver.pageSize
: la cantidad de registros que quiero mostrar por página.
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?pagination[page]=1&pagination[pageSize]=2 --globoff | jq .
Buscar datos en Strapi
Ahora veremos cómo filtrar datos en Strapi.
Acá tenemos una lista de parámetros que podemos usar para buscar información dentro de un modelo:
Operador | Descripción |
---|---|
$eq | Igual |
$eqi | Igual (case-insensitive) |
$ne | Diferente |
$nei | Diferente (case-insensitive) |
$lt | Menor que |
$lte | Menor o igual que |
$gt | Mayor que |
$gte | Mayor o igual que |
$in | Incluido en un array |
$notIn | No incluido en un array |
$contains | Contiene |
$notContains | No contiene |
$containsi | Contiene (case-insensitive) |
$notContainsi | No contiene (case-insensitive) |
$null | es null |
$notNull | no es null |
$between | Entre |
$startsWith | Comienza con |
$startsWithi | Comienza con (case-insensitive) |
$endsWith | Termina en |
$endsWithi | Termine en (case-insensitive) |
$or | Filtra con la expresión “or” |
$and | Filtra con la expresión “and” |
$not | Filtra con la expresión “not” |
Vamos a usar $containsi
para buscar algún termino ignorando si escribimos mayúsculas o minúsculas:
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[Nombre][\$containsi]=xyz --globoff | jq .
NOTA: si nos fijamos, en el ejemplo uso $containsi con el backslash antes de $ porque yo estoy usando la consola y si no lo escapamos, entonces se irá un valor vacío (porque la consola querrá evaludar una variable que no existe) y no funcionará. Si usas Postman o alguno de estos programas, no es necesario anteponer el backslash.
El resultado es el siguiente:
Si queremos filtrar por ID
usamos el operador $eq
:
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[id][\$eq]=3 --globoff | jq .
Si queremos obtener más de un registro por ID
usamos la misma notación que cuando seleccionamos los campos a mostrar:
?filters[id][\$in][0]=2&filters[id][\$in][1]=4
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[id][\$in][0]=2&filters[id][\$in][1]=4 --globoff | jq .
Para mezclar por ejemplo, el ID
o el Nombre
de un producto, usamos el operador $or
:
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[\$or][0][Nombre][\$containsi]=mesa&filters[\$or][1][id][\$eq]=1 --globoff | jq .
Igual podemos usar el operador $and
:
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?filters[\$or][0][Nombre][\$containsi]=mesa&filters[\$and][1][id][\$eq]=4 --globoff | jq .
Filtrar por relaciones en Strapi
Filtrar por relaciones en Strapi permite que podamos buscar los modelos de acuerdo a campos de modelos relacionados, por ejemplo, vamos a obtener los productos cuya categoría contenga la palabra “casa”:
curl -X GET \
--no-progress-meter \
-H "Authorization: bearer 9397b9b201300f9e92a4dcc209a9c86feaf72d96e82f36661bde815edf78c9c5184774befa4e3394d04739a416dc34b2fc1318aa27771b69ee90d51ed1e35e44a08b80388ea8601bfc746a237ea1eb83f8391bc690b44e002c8e846620c86046171913b6033fc52b5490ba3b65a8b1a7905f957d8471799c22049694b0630281" \
http://localhost:1337/api/productos?populate[0]=categorias&filters[categorias][Nombre][\$containsi]=casa --globoff | jq .
Aquí vemos el siguiente formato:
?populate[0]=categorias&filters[categorias][Nombre][\$containsi]=casa
- Queremos mostrar nuestra relación
categorias
- Filtramos el
Nombre
de lascategorias
por “casa”
Puedes obtener más info acá.
Esto ha sido todo por este post.
Gracias por leer.