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

Mostrando entradas con la etiqueta WebApi. Mostrar todas las entradas
Mostrando entradas con la etiqueta WebApi. Mostrar todas las entradas

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!!!