Throttle en Laravel

Rutas en Laravel parte 2: prefijos, fallback, límite de tasa y formularios

Continuación de la explicación de las rutas en Laravel 5.7

Ya vimos la introducción a las rutas en Laravel, en donde exponemos las cosas más importantes y comunes. Este post es la continuación del anterior, y ahora vamos a ver:

  • Prefijos en las rutas para agruparlas
  • Ruta de fallback cuando no se encuentra alguna ruta que coincida con la petición, algo así como manejar un error 404
  • Límite de tasa para limitar las peticiones, usando el middleware de throttle
  • Generación de los verbos HTTP dentro de formularios, por ejemplo PUT, DELETE o esas cosas

Son cosas un poco más avanzadas pero nada imposible de entender.

Te recomiendo leer el post anterior, pues aquí explicaré suponiendo que ya lo has leído.

Prefijos en las rutas

Dependiendo de nuestra aplicación puede que necesitemos prefijar o añadir una cadena constante al inicio de cada ruta. Por ejemplo, si hay algunas rutas que tienen que ver con el administrador, así:

  • administrador/escritorio
  • administrador/ajustes
  • administrador/cuenta
  • administrador/factura/1

Tendríamos que escribir todas las rutas por separado. Pero Laravel provee una manera de prefijarlas y responder a cada ruta a partir de ese prefijo llamando a Route::prefix() y pasándole un argumento que es el prefijo.

Veamos el código de ejemplo:

Ahora en lugar de escribir el prefijo manualmente, indicamos el mismo al llamar a prefix. Luego de eso creamos un grupo de rutas, pasamos una función y dentro de ella podemos trabajar con las rutas de la manera en la que estamos acostumbrados.

Agrupando rutas en Laravel
Agrupando rutas en Laravel

De esa manera podemos agrupar con un prefijo en común. Y ya lo dije en los comentarios, se puede hacer lo mismo que se hace fuera del grupo: pasar parámetros, usar métodos como POST o GET y expresiones regulares.

Nota: también podemos usar prefijos con barras, es decir, en lugar de usar el prefijo administrador podríamos usar administrador/panel como prefijo. En resumen, usar barras inclinadas en el prefijo no genera errores.

La ruta de fallback cuando no se resuelve ninguna ruta

Con la ruta de fallback podemos personalizar o cambiar la forma en la que se maneja un error 404 en Laravel. Normalmente aparece una bonita página de not found, pero podemos manejarla a nuestro antojo.

Para personalizar el comportamiento de cuando no se encuentra o resuelve ninguna ruta, llamamos a Route::fallback y le pasamos una función que se encargará de mostrar un mensaje de error o redirigir, eso depende de nuestra app.

Dentro de la función se puede hacer cualquier cosa aparte de manejar la petición. Por ejemplo, podrías loguear el error.

Nota: la documentación oficial dice que esta debería ser la última ruta en nuestro archivo de rutas; es decir, hay que ponerla al final.

Límite de tasa o rate limiting en las rutas

Esta característica es algo que se agradece mucho. Permite poner un límite de peticiones a las rutas, viene bien cuando tenemos una API (ya que podríamos limitar los accesos por usuario) pero igualmente podría servir para miles de cosas más.

Por cierto, este límite de tasa ya lo había explicado hace algún tiempo, te invito a leer la entrada.

Pero bueno, veamos cómo limitar las peticiones cada cierto tiempo, para que el usuario pueda solicitar los recursos de manera controlada.

Throttle en Laravel
Throttle en Laravel

Vemos que el middleware de throttle recibe dos argumentos: el número de intentos y el número de minutos en los que se puede acceder dentro del número de intentos.

En el primer ejemplo el usuario puede ver la página 2 veces por minuto, en el segundo 100 veces por minuto y en el último se usa la configuración por defecto.

Por cierto, podríamos agrupar las rutas de modo que el throttle se aplique a cada una de las rutas.

Generación de verbos HTTP dentro de formularios

Para terminar con esta parte veamos un complemento a las rutas y es la generación de verbos HTTP dentro de los formularios.

Como sabemos, los formularios solamente tienen 2 métodos: GET y POST. Si estructuramos nuestras rutas de manera que usan otros verbos como PUT o DELETE, no podremos llamarlas con un simple formulario.

Afortunadamente, Laravel provee una manera de definir el método dentro de los formularios con un pequeño campo llamado _method, sí, con todo y guion bajo. Dentro del value del input ponemos el método que usa; Laravel verá el método y llamará a la ruta necesaria.

Para definir el método/verbo HTTP dentro del formulario en las vistas con Blade, hacemos esto:

Es importante mencionar que el método del formulario debe seguir siendo POST, ya que así los datos viajarán en el cuerpo de la petición.

Si tú no usas Blade o no quieres usarlo, genera el código tú mismo poniendo un input de tipo hidden con el nombre de _method y en el valor coloca el verbo HTTP.

Cuando ya tengamos nuestros formularios y rutas configuradas, ahora sí se podrán llamar a otros verbos HTTP desde los formularios.

Conclusión

Con esta segunda parte ya casi sabemos todo lo necesario para trabajar con las rutas en Laravel 5.7. Más adelante traeré tutoriales sobre otros componentes como vistas, generación de formularios o interacción con bases de datos.

Mientras tanto te invito a seguirme en mis redes sociales y también a leer más sobre PHP o Laravel.

Como referencia dejo este enlace a la documentación oficial.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario