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