Tamaño de página dinámico (pero limitado) con paginación de Laravel

Deje que los usuarios decidan, pero no permita que los usuarios abusen.

Laravel hace que la paginación sea un proceso extremadamente simple, simplemente llame a paginate() en Eloquent y termine con eso. Hoy recibí una solicitud de funciones donde tuve que permitir que el equipo de front-end decidiera el tamaño de la página. También es una tarea simple, solo se le da como parámetro paginate($size); . Algo como esto:

A veces esto es todo lo que necesita porque su modelo de negocio puede decirle si esa entidad podría crecer indefinidamente. Para este caso, cobramos por usuario y es muy poco probable que una empresa compre 1 millón de usuarios. Sin embargo, sé que en las próximas semanas trabajaré en otras API que sí tienen millones de registros, lo que significa que no puedo permitir que un tamaño de página sea más grande que una cantidad razonable.

Estupendo. Ahora puedo asegurarme de que la API que estoy exponiendo en Internet no degrade nuestros servicios si alguien configura page_size en mil millones. Pero todavía no se siente increíble porque tengo que acordarme de configurar esto cada vez que estoy escribiendo un punto final portátil .

Rasgo Paginatable

Detrás de escena, Laravel establece de manera predeterminada getPerPage en el Eloquent Model en caso de que no se proporcione un tamaño de página específico. Por defecto, Laravel se envía con 15 por página. Con un rasgo legible , podemos anular ese método e implementarlo en modelos que deberían permitirle al Solicitante decirnos cuántos artículos por página quieren, al mismo tiempo que validamos si no están solicitando demasiado.

Simplemente use el rasgo en su modelo y el Controller puede ser una llamada delgada de paginate() . Es algo realmente simple y pequeño, pero bastante poderoso y conveniente si está esperando escribir este tipo de API públicas.