Tanto en el framework de spring, como en el de angular, se ha incorporado el soporte genérico para la consulta filtrada y ordenada de entidades.
La solicitud de paginación se realizará a través de cabeceras en la petición:
Las cabeceras se pueden omitir en caso de no requerir paginación.
Todos los listados, retornaran información de la paginación aunque esta no se solicite. Esta información va contenida en las cabeceras de respuesta:
La solicitud de ordenación se realizará a través del parámetro s en la petición. En el valor se especificará el atributo o los atributos sobre los que se quiera aplicar la ordenación junto con el criterio de ordenación.
Se podrán solicitar múltiples ordenaciones, separando cada uno de ellos mediante el carácter de punto y coma
Ejemplo:
s=propiedad,asc;propiedad.propiedadHija,desc |
La solicitud de filtrado se realizará a través del parámetro q en la petición. En el valor se especificará la condición o condiciones de filtrado.
Para ello se utilizará la sintaxis propuesta por RSQL: <CAMPO><OPERADOR><VALOR><CONJUNCION>
El nombre del atributo se corresponderán con la propiedad de la entidad consultada, en el caso de que la entidad consultada esté relacionada con otras entidades el acceso a las propiedades anidadas se denotará mediante el punto. Por ejemplo: "propiedad.propiedadHija". Como las propiedades de las entidades no pueden contener ningún carácter especial y el separador no es un carácter reservado del protocolo HTTP no es necesario realizar ningún tipo de escapado.
Se encuentran definidos los siguientes operadores:
Valor | Descripción |
---|---|
== | EQUALS |
=ic= | EQUALS IGNORE CASE |
!= | NOT EQUALS |
=ke= | LIKE |
=nk= | NOT LIKE |
=ik= | LIKE IGNORE CASE |
=ni= | NOT LIKE IGNORE CASE |
=gt= | GREATHER THAN |
=ge= | GREATHER THAN OR EQUAL |
=lt= | LESS THAN |
=le= | LESS THAN OR EQUAL |
=bt= | BETWEEN |
=nb= | NOT BETWEEN |
=na= | IS NULL |
=nn= | IS NOT NULL |
=in= | IN |
=out= | NOT IN |
Se consideran como caracteres reservados:
Por lo que para poder ser usados en las búsquedas deberán escaparse entrecomillando todo el valor, bien con comillas simples o con comillas dobles.
Cuando se realiza este escapado, los caracteres reservados pasan a ser:
Por ello, si el valor contiene el mismo entrecomillado usado de escapado o la \ se deberán escapar adicionalmente preponiendo el carácter \.
Se recomienda escapar siempre el valor
Ejemplo:
Valor a buscar | Valor escapado |
---|---|
mañana >="(\' | "mañana >=\"(\\'" |
Para los operadores que soportan múltiples valores (IN, NOT IN, BETWEEN, NOT BETWEEN) el conjunto de valores irá entré paréntesis, separando cada posible valor mediante coma. Para cada valor aplica de forma independiente las reglas de escapado.
Valores | Valor resultante |
---|---|
| ("3","8") |
Se recomienda escapar siempre el valor
En el caso de que el operador a utilizar no tenga un posible valor a aplicar (NULL, NOT NULL) se deberá asignar un valor vacío entrecomillado.
Es posible conjugar los filtros como AND o OR, los caracteres a utilizar son:
Si solo se utiliza un único filtro, la conjunción se deberá omitir.
Es posible anidar filtros con diferentes conjunciones si colocamos los posibles filtros entre paréntesis.
Filtro | Equivalencia SQL |
---|---|
nombre=="Pedro" | nombre = 'Pedro' |
nombre=ke="Pedro" | nombre LIKE '%Pedro%' |
nombre=="Pedro",nombre=="Juan" | nombre = 'Pedro' OR nombre = 'Juan' |
edad=ge="18";(nombre=="Pedro",nombre=="Juan") | edad >= 18 AND (nombre = 'Pedro' OR nombre = 'Juan') |
edad=bt=("18","20") | edad BETWEEN(18, 20) |