Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más Información. Aceptar

Paginación de resultados en API Rest- Tutorial en Español

Luis Miguel López Magaña
Paginación de resultados en API Rest- Tutorial en Español
El reproductor de video será cargado en breves instantes.

Por qué implementar la paginación de resultados

La paginación de resultados es interesante de implementar cuando el número de resultado que vamos a hacer sobre una consulta es grande o muy grande, ya que es necesario no obtenerlos todos de golpe y dividirlos en lo que se denominan páginas.

Esto es así por dos razones:

  • Por la eficiencia

Si hacemos una consulta, al final va a ir a una base de datos. Esto supone que desde el cliente se hace una petición a servidor, que a su vez manda una consulta a base de datos, que va a recoger los resultados, y que tardará en procesar si la consulta es compleja, y nos la va a devolver.

El conjunto de resultados, además, en bytes, puede que sea grande, dependiendo de lo que estemos consultando, y se lo devolvemos al cliente.

En todo ese proceso, aparte del tiempo que hemos tardado, posiblemente la carga sobre servidor sea bastante grande.

  • Por la experiencia de usuario

Seguramente, la experiencia de usuario también sea negativa. Primero por esa propia carga, ya que a todos nos da mucha pereza hacer algún click en alguna aplicación y que tarde mucho tiempo en responder.

En segundo lugar, por ejemplo, si lo que estamos haciendo es consultar productos en Amazon o en cualquier tienda online, o el timeline de Twitter, Instagram o de cualquier red social, si tenemos allí miles de cosas, lo que interesa es que no aparezcan todas a la vez, y que hasta que no se hayan mostrado todas, la aplicación no responda.

En este caso la experiencia de usuario sería bastante negativa, por ese motivo los resultados se suelen paginar y se obtiene un conjunto de resultados, y si queremos obtener más, diseñaremos algún mecanismo que a partir de ahí nos vaya ofreciendo diferentes páginas de resultados.

Qué nos ofrece Spring

En Spring tenemos algunos elementos para poder hacer la paginación, como por ejemplo Spring Data JPA, que nos ofrece en sus repositorios la posibilidad de realizar consultas paginadas.

De hecho, la interfaz JpaRepository<T,ID>, que es la que se suele extender en estos casos, a su vez extiende a PagingAndSortingRepository<T,ID>, que es la que confiere la posibilidad de realizar paginación y ordenación de la salida de resultados.

De una manera sencilla, como son los repositorios de Spring Data JPA, complementariamente a lo sencillos que ya resultan, también de una manera sencilla tenemos la posibilidad de paginar nuestros resultados.

Tenemos disponibles, por ejemplo:

  • El método Page<T> findAll(Pageable pageable), al que se le proporciona un objeto de tipo Pageable.

  • El método Page<T> findByAlgo(Algo algo, Pageable pageable), ya que podemos diseñar en Spring Data JPA consultas derivadas en base al nombre de la propia consulta (ByAlgo), pues le podemos pasar ese Algo y además siempre podemos pasar un objeto de tipo Pageable.

Todo ello lo tenemos disponible desde el PagingAndSortingRepository, dónde se definen este tipo de consultas, y JpaRepository, que hereda del mismo, también lo incorpora.

Algunas interfaces/clases

Para poder manejar esta paginación, tenemos algunas interfaces y clases que la implementan:

· Pageable

Como hemos visto anteriormente, Pageable sería un elemento de entrada de la consulta, y es la información necesaria para saber qué página queremos extraer.

Por ejemplo, suponemos que dentro de nuestra base de datos tenemos 100 resultados y queremos obtener los 10 primeros. En este caso, a través de un objeto de tipo Pageable tendremos que indicar que queremos la primera página, y que tendrá un tamaño de 10 resultados.

· Page<T>

Por otro lado, tenemos la interfaz Page<T>, que es el resultado de una consulta paginada.

No es más una parte de la lista de todos los objetos que hay almacenados en la base de datos, una parte de esa lista, que además también tiene información sobre la lista completa, como, por ejemplo, el número total de páginas, el número total de elementos, etcétera.

Spring Data Web Support

Lo anterior lo tenemos dentro de Spring Data JPA, pero a nosotros los elementos de paginación los vamos a querer manejar desde los controladores, en nuestro caso de los controladores REST.

Spring Data Web Support nos permite usar clases de Spring Data JPA, en la capa web, es como el nexo de unión entre ambas capas.

De esta manera vamos a poder utilizar objetos de ese paquete de Spring Data dentro de los controladores, procesarlos para construir un objeto de ese tipo y poder utilizarlo para realizar las consultas dentro de nuestra API.

Un ejemplo sería el siguiente:

@RestController
public class ProductController {

        …
        @GetMapping(“/producto”)
        public String index(Model model)
        @PageableDefault(page=0, size=5) Pageable pageable) {
                // …
        }
        …
}

Ejemplo práctico

Para implementar todo esto en un proyecto, teniendo incluidas las dependencias de Spring Data y Spring Web ya tendríamos todo el mecanismo necesario.

Se podría definir una consulta que fuese paginada de una manera muy sencilla, tal y como se puede ver en el ejemplo práctico del video, en el que paso a paso podrás ver todo el proceso.

Relacionado

Te dejamos una selección de cursos, carreras y artículos

Curso de Spring Core 5

Curso de Spring Core 5

curso

Con este curso aprenderás:

  • Conocer los patrones de diseño más usados en aplicaciones empresariales.
  • Conocerás qué es Spring y cuales son los módulos que conforman esta tecnología.
  • Uso los mecanismos de inversión de control e inyección de dependencias.

Duración: 4 horas y 7 minutos

Curso de desarrollo de una API REST con Spring Boot

Curso de desarrollo de una API REST con Spring Boot

curso

Con este curso aprenderás:

  • Conocerás las características de la arquitectura REST.
  • Aprenderás a generar un proyecto de Spring Boot para una API REST.
  • Utilizarás librerías como Lombok.

Duración: 4 horas y 34 minutos

Estas son algunas de las empresas que ya confían en OpenWebinars

Profesores y profesionales

Nuestros docentes son profesionales que trabajan día a día en la materia que imparten

Conviértete en profesor de OpenWebinars