OpenWebinars

Lenguajes de Programación

Paginación de resultados en API Rest

En esta ocasión te contamos cómo realizar la paginación de resultados al desarrollar una API REST, utilizando en este caso uno de los mecanismos que existen para ello.

Luis Miguel López Magaña

Luis Miguel López Magaña

Experto en Java

Lectura 3 minutos

Publicado el 29 de noviembre de 2019

Compartir

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.

Conviértete en un Backend Developer
Domina los lenguajes de programación más demandados. Accede a cursos, talleres y laboratorios para crear proyectos con Java, Python, PHP, Microsoft .NET y más
Comenzar gratis ahora

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) {
                // …
        }
        …
}

Mejora las habilidades de tus desarrolladores
Acelera la formación tecnológica de tus equipos con OpenWebinars. Desarrolla tu estrategia de atracción, fidelización y crecimiento de tus profesionales con el menor esfuerzo.
Solicitar más información

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.

Compartir este post

También te puede interesar

Icono de la tecnología
Curso

Curso de Spring Core

Avanzado
4 h. y 7 min.

Aprende con el curso de Spring Core 5 a utilizar el motor de Spring para crear las mejores...

Luis Miguel López Magaña
4.4
Icono de la tecnología
Curso

Spring Boot y Spring MVC

Intermedio
8 h. y 32 min.

Con este curso de Spring Boot y Spring MVC online y en español aprenderás a desarrollar tus propias...

Luis Miguel López Magaña
4.5