Un blog con consejos y sugerencias sobre programación en Csharp que he aprendido a lo largo de los años

miércoles, 13 de abril de 2022

Paginación desde WebApi

abril 13, 2022 Posted by Uriel Martínez , No comments

 Paginación desde WebApi

A veces cuando realizas un reporte, la información  solicitada  es  tan  grande  que cuesta  mucho trabajarla desde el Front; es decir, desde el explorador, imagínate un reporte de 1000 registros, la webapi la obtiene de la base en cuestión de segundos y la entrega en un formato JSON al front. Ninguna novedad cierto?.
Del lado front web, se recibe el JSON y se pagina en tiempo de ejecución; digamos que para este ejemplo, que sean 100 páginas de 10 registro por cada una. El tiempo que tarda es de 10 segundos de toda la operación.

Bien  y ahora si el reporte es de 800 mil registros? El tema cambia EXPONENCIALMENTE,  un JSON tan grande pudiera ser un problema en todo el flujo y si no se desborda, el trabajo y esfuerzo que deberá llevar el explorador será tanto que  simplemente  se podría vencen el timeout, "pasmar" el explorador o que el usuario se desespere por no recibir la información.

Para ello vamos a implementar la paginación pero ahora del lado del servidor

Estructura de la paginación

Esta parte es sencilla, necesitamos el número de página a solicitar y el tamaño de la página, podemos  crear una clase o bien en la solicitud GET recibirlos como parámetros;  para este ejemplo, será en el GET


Una vez que tengamos los parámetros el proceso de obtención de información es cosa de cada quien, lo importante será al entregarla:


Creamos nuestra función ObtenerPaginacion


Vamos a explicarla, primero obtenemos el total de todas las páginas con una  operación   matemática basándonos entre el total de registros a entregar
Una vez que tengamos esa información, entregaremos en el header de la respuesta un objeto que contendrá la información que el front necesitará para interpretar y pintar el resultado

Aquí la magia:

lista.Skip((numPagina - 1) * tamPagina).Take(tamPagina).ToList();

con esta línea vamos a entregar solo la información de la página solicitada y con el tamaño solicitado


Como ven, no es tan complicado una vez que entendemos como funciona al división de páginas

Saludos!!!