{"id":69255,"date":"2023-08-21T15:23:57","date_gmt":"2023-08-21T13:23:57","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=69255&#038;preview=true&#038;preview_id=69255"},"modified":"2023-08-29T12:12:00","modified_gmt":"2023-08-29T10:12:00","slug":"laravel-throttle","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/","title":{"rendered":"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel"},"content":{"rendered":"<p>La limitaci\u00f3n de velocidad es fundamental para proteger los recursos de una aplicaci\u00f3n o sitio web de un uso excesivo o indebido. Ya sea resultado de la intervenci\u00f3n humana maliciosa, de ataques basados en bots o de una vulnerabilidad pasada por alto, el uso indebido de los recursos puede interferir con el acceso leg\u00edtimo a tu aplicaci\u00f3n e introducir vulnerabilidades graves.<\/p>\n<p>Este art\u00edculo explora c\u00f3mo a\u00f1adir la limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Limita el Tr\u00e1fico de tu API con Throttle en Laravel<\/h2>\n<p>La limitaci\u00f3n de velocidad es un mecanismo dise\u00f1ado para mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n. Aunque tiene muchos usos, es especialmente \u00fatil para las API p\u00fablicas en sistemas grandes y escalables. Garantiza que todos los usuarios leg\u00edtimos conserven un acceso justo a los recursos del sistema.<\/p>\n<p>La limitaci\u00f3n de velocidad tambi\u00e9n es crucial para la seguridad, el control de costes y la estabilidad general del sistema. Puede ayudar a evitar ataques basados en peticiones, como los ataques distribuidos de denegaci\u00f3n de servicio (DDoS). Este ataque se basa en el env\u00edo de peticiones repetidas para saturar e interrumpir el acceso a una aplicaci\u00f3n o servidor web.<\/p>\n<p>Existen varios m\u00e9todos para aplicar la limitaci\u00f3n de velocidad. Puedes utilizar variables que identifiquen al solicitante para determinar qui\u00e9n puede acceder a tu aplicaci\u00f3n y con qu\u00e9 frecuencia. Algunas variables comunes son<\/p>\n<ul>\n<li><strong>Direcci\u00f3n IP<\/strong> \u2014 Implementar l\u00edmites de tasa basados en direcciones IP te permite restringir el n\u00famero de solicitudes por direcci\u00f3n. Este m\u00e9todo es especialmente beneficioso en circunstancias en las que los usuarios pueden acceder a una aplicaci\u00f3n sin proporcionar credenciales.<\/li>\n<li><strong>Clave API<\/strong> \u2014 Limitar el acceso mediante claves API implica proporcionar al solicitante claves API pregeneradas y establecer l\u00edmites de tarifa por clave. Con este enfoque, tambi\u00e9n puedes aplicar distintos niveles de acceso a las claves API generadas.<\/li>\n<li><strong>ID de Cliente<\/strong> \u2014 Tambi\u00e9n puedes pregenerar un ID de cliente que un usuario puede incrustar en la cabecera o en el cuerpo de las solicitudes de API. Este m\u00e9todo te permite establecer niveles de acceso por ID para garantizar que ning\u00fan cliente pueda monopolizar los recursos del sistema.<\/li>\n<\/ul>\n<h3>Middleware Laravel<\/h3>\n<p>El middleware proporciona un mecanismo pr\u00e1ctico para inspeccionar y filtrar <a href=\"https:\/\/kinsta.com\/es\/blog\/javascript-peticion-http\/\">las peticiones HTTP<\/a> que entran en una aplicaci\u00f3n. Esencialmente, es una capa de c\u00f3digo entre la aplicaci\u00f3n y su infraestructura subyacente para permitir la comunicaci\u00f3n entre sus recursos.<\/p>\n<h2>C\u00f3mo Implementar L\u00edmites de Velocidad<\/h2>\n<p>Este tutorial utiliza una mini biblioteca API existente en el framework Laravel 10 para demostrar el uso de Laravel Throttle. El proyecto de ejemplo inicial contiene las implementaciones b\u00e1sicas de creaci\u00f3n, lectura, actualizaci\u00f3n y eliminaci\u00f3n (CRUD, \u00a0create, read, update, and delete) necesarias para gestionar los libros de una colecci\u00f3n y dos rutas adicionales para demostrar algunos conceptos de limitaci\u00f3n de velocidad.<\/p>\n<h3>Requisitos Previos<\/h3>\n<p>El tutorial asume que est\u00e1s familiarizado con los fundamentos del desarrollo de APIs en Laravel. Aseg\u00farate de que tienes lo siguiente:<\/p>\n<ul>\n<li>PHP 8.2, <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a> y <a href=\"https:\/\/laravel.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel<\/a> instalados y configurados en tu m\u00e1quina local<\/li>\n<li>Una cuenta activa en <a href=\"https:\/\/kinsta.com\/es\/suscripcion\/\">Kinsta<\/a><\/li>\n<li>Una cuenta en <a href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>, <a href=\"https:\/\/gitlab.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitLab<\/a> o <a href=\"https:\/\/bitbucket.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bitbucket<\/a> para enviar tu c\u00f3digo<\/li>\n<\/ul>\n<p>Tambi\u00e9n puedes utilizar <a href=\"https:\/\/my.kinsta.com?lang=es\">MyKinsta<\/a> para configurar y desplegar esta API. Puedes seguir la <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-library-api-template\" target=\"_blank\" rel=\"noopener noreferrer\">plantilla de proyecto<\/a> proporcionada y previsualizar el resultado final desde el <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-library-api\" target=\"_blank\" rel=\"noopener noreferrer\">c\u00f3digo fuente completo<\/a>.<\/p>\n<h2>Configuraci\u00f3n de la Aplicaci\u00f3n Laravel<\/h2>\n<ol start=\"1\">\n<li>Para empezar, clona la <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-library-api-template\">plantilla de proyecto<\/a>.<\/li>\n<li>A continuaci\u00f3n, crea un archivo <strong>.env<\/strong> en el directorio root del proyecto y copia en \u00e9l el contenido de <strong>.env.example<\/strong>.<\/li>\n<li>A continuaci\u00f3n, completa la configuraci\u00f3n utilizando los siguientes comandos para instalar las dependencias de la aplicaci\u00f3n y generar la clave de la app.<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">composer install\nphp artisan key:generate<\/code><\/pre>\n<p>Si este comando no a\u00f1ade autom\u00e1ticamente la clave de la aplicaci\u00f3n a tu archivo <strong>.env<\/strong>, ejecuta <code>php artisan key:generate --show<\/code>, copia la clave generada y p\u00e9gala en tu archivo <strong>.env<\/strong> como valor de <code>APP_KEY<\/code>.<\/p>\n<ol start=\"4\">\n<li>Una vez finalizada la instalaci\u00f3n de las dependencias y la generaci\u00f3n de la clave de la app, inicia la aplicaci\u00f3n con el siguiente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan serve<\/code><\/pre>\n<p>Este comando inicia la aplicaci\u00f3n y la hace accesible a trav\u00e9s del navegador en <code>https:\/\/127.0.0.1:8000<\/code>.<\/p>\n<ol start=\"5\">\n<li>Visita la URL para confirmar que se rellena la p\u00e1gina de bienvenida de Laravel:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1279px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-welcome-page.png\" alt=\"La p\u00e1gina de bienvenida de Laravel muestra su logotipo en la parte superior central. \" width=\"1279\" height=\"801\"><figcaption class=\"wp-caption-text\">La pantalla de bienvenida de Laravel<\/figcaption><\/figure><\/figure>\n<h2>Configuraci\u00f3n de la Base de Datos<\/h2>\n<p>Vamos a configurar y establecer la base de datos de la aplicaci\u00f3n en <a href=\"https:\/\/my.kinsta.com\/login?lang=es\">MyKinsta<\/a>.<\/p>\n<ol start=\"1\">\n<li>Navega al panel de control de tu cuenta MyKinsta y haz clic en el bot\u00f3n <strong>A\u00f1adir servicio<\/strong>:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1582px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-services.png\" alt=\"El segmento superior de la pesta\u00f1a Panel de MyKinsta presenta una barra de herramientas superior. \" width=\"1582\" height=\"476\"><figcaption class=\"wp-caption-text\">Panel de MyKinsta con varios servicios configurados.<\/figcaption><\/figure><\/figure>\n<ol start=\"2\">\n<li>En la lista <strong>A\u00f1adir servicio<\/strong>, haz clic en <strong>Base de datos<\/strong> y configura los par\u00e1metros para iniciar tu instancia de base de datos:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 786px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-database.png\" alt=\"El m\u00f3dulo \"Crear una base de datos\" de Kinsta muestra la primera secci\u00f3n, llamada \"Detalles b\u00e1sicos\".\" width=\"786\" height=\"1266\"><figcaption class=\"wp-caption-text\">Configuraci\u00f3n de la base de datos MyKinsta.<\/figcaption><\/figure><\/figure>\n<p>Este tutorial utiliza MariaDB, pero puedes elegir cualquiera de las opciones de base de datos compatibles con Laravel que proporciona Kinsta.<\/p>\n<ol start=\"3\">\n<li>Una vez que hayas introducido los detalles de tu base de datos, haz clic en el bot\u00f3n <strong>Continuar<\/strong> para finalizar el proceso.<\/li>\n<\/ol>\n<p>Las bases de datos aprovisionadas en Kinsta tienen par\u00e1metros de conexi\u00f3n internos y externos. Debes utilizar par\u00e1metros de conexi\u00f3n internos para las aplicaciones alojadas dentro de la misma cuenta de Kinsta y par\u00e1metros externos para las conexiones externas. Por lo tanto, utiliza las credenciales de la base de datos externa de Kinsta para tu aplicaci\u00f3n.<\/p>\n<ol start=\"4\">\n<li>Copia y actualiza las credenciales <strong>.env<\/strong> de la base de datos de la aplicaci\u00f3n con las credenciales externas que se muestran en la siguiente captura de pantalla:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1590px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-database-settings.png\" alt=\"El panel de control de Kinsta muestra la secci\u00f3n \"Detalles b\u00e1sicos\" de la base de datos \"library-records\" reci\u00e9n creada. Toda la informaci\u00f3n coincide con la introducida en la imagen de configuraci\u00f3n de la base de datos anterior.\" width=\"1590\" height=\"1133\"><figcaption class=\"wp-caption-text\">Detalles de configuraci\u00f3n de la base de datos de MyKinsta.<\/figcaption><\/figure><\/figure>\n<pre><code class=\"language-env\">DB_CONNECTION=mysql\nDB_HOST=your_host_name\nDB_PORT=your_port\nDB_DATABASE=your_database_info\nDB_USERNAME=your_username\nDB_PASSWORD=your_password<\/code><\/pre>\n<ol start=\"5\">\n<li>Despu\u00e9s de rellenar las credenciales de la base de datos, prueba la conexi\u00f3n aplicando la migraci\u00f3n de la base de datos mediante el siguiente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<p>Si todo funciona correctamente, deber\u00edas ver una respuesta similar a la que se muestra a continuaci\u00f3n.<\/p>\n<figure>\n<p><figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-terminal-database-migration.png\" alt=\"La salida del terminal muestra el comando Bash \"php artisan migrate\" y su salida.Inmediatamente debajo del comando, una etiqueta \"INFO\" indica \"Running migrations. \"Debajo aparecen las cuatro migraciones y sus estados, listados como sigue:2014_10_12_000000_create_users_table...812ms DONE.2014 2019_08_19_000000_create_failed_jobs_table...942ms DONE.2019_12_14_000001_create_personal_access_tokens_table...1,250ms DONE.A continuaci\u00f3n, el cursor se sit\u00faa en una l\u00ednea de comandos vac\u00eda para permitir entradas adicionales.\" width=\"1999\" height=\"450\"><figcaption class=\"wp-caption-text\">Migraci\u00f3n exitosa de la base de datos en un terminal.<\/figcaption><\/figure><\/figure>\n<ol start=\"6\">\n<li>A continuaci\u00f3n, utiliza el siguiente comando para listar las rutas de la aplicaci\u00f3n y ver las rutas ya implementadas.<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan route:list<\/code><\/pre>\n<p>Ahora deber\u00edas ver los endpoints de la API disponibles:<\/p>\n<figure>\n<p><figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-terminal-api-endpoints.png\" alt=\"El terminal muestra la ruta \"php artisan\":\" width=\"1999\" height=\"411\"><figcaption class=\"wp-caption-text\">Lista de rutas de la aplicaci\u00f3n en el terminal.<\/figcaption><\/figure><\/figure>\n<ol start=\"7\">\n<li>Inicia la aplicaci\u00f3n y confirma que todo sigue funcionando correctamente. Puedes probar estos endpoints a trav\u00e9s del terminal utilizando una herramienta como <a href=\"https:\/\/www.postman.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Postman<\/a> o CURL.<\/li>\n<\/ol>\n<h2>C\u00f3mo Limitar la Tasa en una Aplicaci\u00f3n Laravel<\/h2>\n<p>Existen varias t\u00e9cnicas de limitaci\u00f3n de velocidad para las aplicaciones Laravel. Puedes bloquear un conjunto de <a href=\"https:\/\/kinsta.com\/es\/blog\/ip-estaticas-y-dinamicas\/\">direcciones IP<\/a> o aplicar l\u00edmites de solicitud basados en la duraci\u00f3n en funci\u00f3n de la direcci\u00f3n IP o el user_id de un usuario. A continuaci\u00f3n, aplica cada uno de estos m\u00e9todos.<\/p>\n<ol start=\"1\">\n<li>Instala el paquete Laravel Throttle con el siguiente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">composer require \"graham-campbell\/throttle:^10.0\"<\/code><\/pre>\n<ol start=\"2\">\n<li>Tambi\u00e9n puedes realizar cambios adicionales en las configuraciones de Laravel Throttle publicando el archivo <code>vendor configurations<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan vendor:publish --provider=\"GrahamCampbellThrottleThrottleServiceProvider\"<\/code><\/pre>\n<h3>C\u00f3mo Bloquear Direcciones IP<\/h3>\n<p>Una t\u00e9cnica de limitaci\u00f3n de velocidad te permite bloquear peticiones de un conjunto espec\u00edfico de direcciones IP.<\/p>\n<ol start=\"1\">\n<li>Para empezar, crea el middleware necesario:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan make:middleware RestrictMiddleware<\/code><\/pre>\n<ol start=\"2\">\n<li>A continuaci\u00f3n, abre el archivo de middleware <strong>app\/Http\/Middleware\/RestrictMiddleware.php<\/strong> creado y sustituye el c\u00f3digo de la funci\u00f3n <code>handle<\/code> por el fragmento que aparece a continuaci\u00f3n. Aseg\u00farate de a\u00f1adir <code>use App;<\/code> a la lista de importaciones en la parte superior del archivo.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$restrictedIps = ['127.0.0.1', '102.129.158.0'];\nif(in_array($request-&gt;ip(), $restrictedIps)){\n  App::abort(403, 'Request forbidden');\n}\nreturn $next($request);<\/code><\/pre>\n<ol start=\"3\">\n<li>En el archivo <strong>app\/Http\/Kernel.php<\/strong>, crea un alias para esta aplicaci\u00f3n de middleware actualizando el array <code>middlewareAliases<\/code> como se indica a continuaci\u00f3n:\n<pre><code class=\"language-php\">protected $middlewareAliases = [\n. . .\n'custom.restrict' =&gt; AppHttpMiddlewareRestrictMiddleware::class,\n];<\/code><\/pre>\n<ol start=\"4\">\n<li>A continuaci\u00f3n, aplica este middleware a <code>\/restricted-route<\/code> en el archivo <strong>routes\/api.php<\/strong> como se indica a continuaci\u00f3n y prueba:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['custom.restrict'])-&gt;group(function () {\n  Route::get('\/restricted-route', [BookController::class, 'getBooks']);\n});<\/code><\/pre>\n<p>Cuando funciona correctamente, este middleware bloquea todas las peticiones procedentes de las IP del array\u00a0<code> $restrictedIps<\/code>: <code>127.0.0.1<\/code> y <code>102.129.158.0<\/code>. Las solicitudes procedentes de estas IP devuelven una respuesta <strong>403 Forbidden<\/strong>, como se muestra a continuaci\u00f3n:<\/p>\n<figure>\n<p><figure style=\"width: 1136px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-postman-returns-403.png\" alt=\"La aplicaci\u00f3n Postman devuelve una respuesta \"403 Request Forbidden\" a una solicitud GET a la URL\" width=\"1136\" height=\"807\"><figcaption class=\"wp-caption-text\">Una respuesta 403 Forbidden para el endpoint \/restricted-route GET en Postman<\/figcaption><\/figure><\/figure>\n<h3>C\u00f3mo Usar Throttle para Limitar Solicitudes por Direcci\u00f3n IP<\/h3>\n<p>A continuaci\u00f3n, puedes limitar las solicitudes utilizando la direcci\u00f3n IP del usuario.<\/p>\n<ol start=\"1\">\n<li>Aplica el middleware Throttle a las rutas <code>GET<\/code> y <code>PATCH<\/code> del endpoint <code>\/book<\/code> en <strong>routes\/api.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['throttle:minute'])-&gt;group(function () {\n  Route::get('\/book', [BookController::class, 'getBooks']);\n});\n\nRoute::middleware(['throttle:5,1'])-&gt;group(function () {\n  Route::patch('\/book', [BookController::class, 'updateBook']);\n});<\/code><\/pre>\n<ol start=\"2\">\n<li>Tambi\u00e9n debes actualizar la funci\u00f3n <code>configureRateLimiting<\/code> en el archivo <strong>app\/Providers\/RouteServiceProvider<\/strong> con el middleware que has a\u00f1adido a las rutas anteriores.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\u2026 \nRateLimiter::for('minute', function (Request $request) {\n  return Limit::perMinute(5)-&gt;by($request-&gt;ip());\n});<\/code><\/pre>\n<p>Esta configuraci\u00f3n limita las peticiones al endpoint <code>\/book GET<\/code> a 5 por minuto, como se muestra a continuaci\u00f3n.<\/p>\n<figure>\n<p><figure style=\"width: 1142px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-postman-returns-429.png\" alt=\"La aplicaci\u00f3n Postman devuelve una respuesta \"429 Too Many Requests\" a una solicitud GET a la URL \" width=\"1142\" height=\"805\"><figcaption class=\"wp-caption-text\">Una respuesta \u00ab429 Too Many Requests\u00bb para el endpoint \/book GET en Postman.<\/figcaption><\/figure><\/figure>\n<h3>C\u00f3mo Usar Throttle Bas\u00e1ndose en el ID de Usuario y Sesiones<\/h3>\n<ol start=\"1\">\n<li>Para limitar la tasa utilizando los par\u00e1metros <code>user_id<\/code> y <code>session<\/code>, actualiza la funci\u00f3n <code>configureRateLimiting<\/code> en el archivo <strong>app\/Providers\/RouteServiceProvider<\/strong> con los siguientes limitadores y variables adicionales:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">...\nRateLimiter::for('user', function (Request $request) {\n  return Limit::perMinute(10)-&gt;by($request-&gt;user()?-&gt;id ?: $request-&gt;ip());\n});\nRateLimiter::for('session', function (Request $request) {\n  return Limit::perMinute(15)-&gt;by($request-&gt;session()-&gt;get('key') ?: $request-&gt;ip());\n});<\/code><\/pre>\n<ol start=\"2\">\n<li>Por \u00faltimo, aplica este c\u00f3digo a las rutas <code>\/book\/{id} GET<\/code> y <code>\/book POST<\/code> del archivo <code>routes\/api.php<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['throttle:user'])-&gt;group(function () {\n  Route::get('\/book\/{id}', [BookController::class, 'getBook']);\n});\nRoute::middleware(['throttle:session'])-&gt;group(function () {\n  Route::post('\/book', [BookController::class, 'createBook']);\n});<\/code><\/pre>\n<p>Este c\u00f3digo limita las peticiones que utilizan <code>user_id<\/code> y <code>session<\/code>, respectivamente.<\/p>\n<h3>M\u00e9todos Adicionales en Throttle<\/h3>\n<p>Laravel Throttle cuenta con varios <a href=\"https:\/\/github.com\/GrahamCampbell\/Laravel-Throttle#usage\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todos adicionales<\/a> para un mayor control sobre tu implementaci\u00f3n de limitaci\u00f3n de velocidad. Estos m\u00e9todos incluyen:<\/p>\n<ul>\n<li><code>attempt<\/code>\u00a0 \u2014 Accede al endpoint, incrementa el contador de accesos y devuelve un valor booleano que indica si se ha superado el l\u00edmite de accesos configurado.<\/li>\n<li><code>hit<\/code> \u2014\u00a0 Accede a Throttle, incrementa el contador de accesos y devuelve <code>$this<\/code> para habilitar otra llamada al m\u00e9todo (opcional).<\/li>\n<li><code>clear<\/code> \u2014 Reinicia el contador de Throttle a cero y devuelve <code>$this<\/code> para que puedas realizar otra llamada al m\u00e9todo si lo deseas.<\/li>\n<li><code>count<\/code> &#8211; Devuelve el n\u00famero total de accesos a Throttle.<\/li>\n<li><code>check<\/code> &#8211; Devuelve un booleano que indica si se ha superado el l\u00edmite de aciertos a Throttle.<\/li>\n<\/ul>\n<ol start=\"1\">\n<li>Para explorar la limitaci\u00f3n de velocidad utilizando estos m\u00e9todos, crea una aplicaci\u00f3n middleware llamada CustomMiddleware utilizando el comando que aparece a continuaci\u00f3n:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan make:middleware CustomMiddleware<\/code><\/pre>\n<ol start=\"2\">\n<li>A continuaci\u00f3n, a\u00f1ade los siguientes archivos de importaci\u00f3n al archivo middleware reci\u00e9n creado en <strong>app\/Http\/Middleware\/CustomMiddleware.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use GrahamCampbellThrottleFacadesThrottle;\nuse App;<\/code><\/pre>\n<ol start=\"3\">\n<li>A continuaci\u00f3n, sustituye el contenido del m\u00e9todo <code>handle<\/code> por el siguiente fragmento de c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$throttler = Throttle::get($request, 5, 1);\nThrottle::attempt($request);\nif(!$throttler-&gt;check()){\n  App::abort(429, 'Too many requests');\n}\nreturn $next($request);<\/code><\/pre>\n<ol start=\"4\">\n<li>En el archivo <strong>app\/Http\/Kernel.php<\/strong>, crea un alias para esta aplicaci\u00f3n de middleware actualizando el array <code>middlewareAliases<\/code> como sigue.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">protected $middlewareAliases = [\n. . .\n'custom.throttle' =&gt; AppHttpMiddlewareCustomMiddleware::class, \n];<\/code><\/pre>\n<ol start=\"5\">\n<li>A continuaci\u00f3n, aplica este middleware a <code>\/custom-route<\/code> en el archivo <strong>routes\/api.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['custom.throttle'])-&gt;group(function () {\n  Route::get('\/custom-route', [BookController::class, 'getBooks']);\n});<\/code><\/pre>\n<p>El middleware personalizado que acaba de implementarse verifica si se ha superado el l\u00edmite de Throttle mediante la funci\u00f3n <code>check<\/code> method. If the limit is exceeded, it responds with a 429 error. Otherwise, it allows the request to continue.<\/p>\n<h2>C\u00f3mo Desplegar la Aplicaci\u00f3n en el Servidor Kinsta<\/h2>\n<p>Ahora que has explorado c\u00f3mo implementar la limitaci\u00f3n de velocidad en una aplicaci\u00f3n Laravel, despliega la aplicaci\u00f3n en el servidor Kinsta para que sea accesible globalmente.<\/p>\n<ol start=\"1\">\n<li>Empieza enviando el c\u00f3digo actualizado a <a href=\"https:\/\/kinsta.com\/es\/blog\/gitlab-vs-github\/\">GitHub, GitLab<\/a> o <a href=\"https:\/\/kinsta.com\/es\/blog\/bitbucket-vs-github\/\">Bitbucket<\/a>.<\/li>\n<li>Desde tu panel de control de Kinsta, haz clic en el bot\u00f3n <strong>A\u00f1adir servicio<\/strong> y selecciona <strong>Aplicaci\u00f3n<\/strong> de la lista. Vincula tu cuenta Git a tu cuenta Kinsta y selecciona el repositorio correcto para desplegar.<\/li>\n<li>En <strong>Detalles b\u00e1sicos<\/strong>, asigna un nombre a la aplicaci\u00f3n y elige tu centro de datos preferido. Adem\u00e1s, aseg\u00farate de que has a\u00f1adido las variables de entorno de la aplicaci\u00f3n necesarias. \u00c9stas corresponden a las variables presentes en tu archivo <strong>.env<\/strong> local: las variables de configuraci\u00f3n <code>APP_KEY<\/code> y de la base de datos.<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 790px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-app-details.png\" alt=\"La secci\u00f3n \"Detalles de la aplicaci\u00f3n\" del m\u00f3dulo \"A\u00f1adir aplicaci\u00f3n\" de Kinsta. \" width=\"790\" height=\"1262\"><figcaption class=\"wp-caption-text\">Detalles de la aplicaci\u00f3n en MyKinsta.<\/figcaption><\/figure><\/figure>\n<ol start=\"1\">\n<li>Haz clic en el bot\u00f3n <strong>Continuar<\/strong> para seleccionar las variables de entorno de construcci\u00f3n. Puedes dejar los valores por defecto, ya que Kinsta autocompleta los par\u00e1metros necesarios.<\/li>\n<li>En la pesta\u00f1a <strong>Procesos<\/strong>, puedes dejar los valores por defecto o introducir un nombre para tu proceso. En esta pesta\u00f1a tambi\u00e9n puedes seleccionar el tama\u00f1o de los pods y de las instancias.<\/li>\n<li>Por \u00faltimo, la pesta\u00f1a <strong>Pago<\/strong> muestra un resumen de tus selecciones. A\u00f1ade tu opci\u00f3n de pago preferida para finalizar el proceso.<\/li>\n<li>Una vez completado, haz clic en la pesta\u00f1a <strong>Aplicaciones<\/strong> para ver una lista de las aplicaciones desplegadas.<\/li>\n<li>Haz clic en el nombre de la aplicaci\u00f3n para ver los detalles de su despliegue, como se muestra a continuaci\u00f3n. Puedes utilizar la URL de la aplicaci\u00f3n para acceder a ella.<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1587px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-app-deployments.png\" alt=\"La pesta\u00f1a \"Despliegues\" de MyKinsta muestra detalles sobre las aplicaciones desplegadas.\" width=\"1587\" height=\"836\"><figcaption class=\"wp-caption-text\">Detalles del despliegue en el panel de MyKinsta.<\/figcaption><\/figure><\/figure>\n<h2>C\u00f3mo Probar la Aplicaci\u00f3n<\/h2>\n<ol start=\"1\">\n<li>Para probar la aplicaci\u00f3n localmente, utiliza el comando <code>php artisan serve<\/code>.<\/li>\n<\/ol>\n<p>Este comando hace que el navegador de tu aplicaci\u00f3n sea accesible en <code>http:\/\/localhost:8000<\/code>. Desde aqu\u00ed puedes probar los endpoints de la API en los que implementaste la limitaci\u00f3n de velocidad, realizando llamadas repetidas para activar la funcionalidad de limitaci\u00f3n de velocidad.<\/p>\n<p>El servidor de Kinsta muestra una respuesta de <strong>Acceso Prohibido<\/strong> porque no has a\u00f1adido detalles de configuraci\u00f3n que indiquen a Kinsta c\u00f3mo servir la aplicaci\u00f3n. A\u00f1ade estos detalles ahora.<\/p>\n<ol start=\"2\">\n<li>Crea un archivo <code>.htaccess<\/code> en el directorio root de tu aplicaci\u00f3n y a\u00f1ade el siguiente c\u00f3digo al archivo:<\/li>\n<\/ol>\n<pre><code class=\"language-apacheconf\"> &lt;IfModule mod_rewrite.c&gt;\n  RewriteEngine On\n  RewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule&gt;<\/code><\/pre>\n<ol start=\"3\">\n<li>Env\u00eda estos cambios a GitHub y Kinsta se autodespliega para aplicar el cambio.<\/li>\n<li>Ahora, abre la aplicaci\u00f3n utilizando la URL proporcionada y aseg\u00farate de que ves la p\u00e1gina de bienvenida de Laravel.<\/li>\n<\/ol>\n<p>Ahora puedes probar los endpoints de la API en los que has implementado la limitaci\u00f3n de velocidad mediante Postman, realizando llamadas repetidas hasta alcanzar el l\u00edmite configurado. Recibir\u00e1s una respuesta <strong>429 Demasiadas Peticiones<\/strong><strong>\u00a0<\/strong>tras superar el l\u00edmite.<\/p>\n<h2>Resumen<\/h2>\n<p>Integrar funcionalidades de limitaci\u00f3n de velocidad en una API de Laravel ayuda a controlar la velocidad a la que los usuarios consumen los recursos de una aplicaci\u00f3n. La limitaci\u00f3n de la tasa te ayuda a proporcionar una experiencia de usuario fiable sin gastar de m\u00e1s ni de menos. Tambi\u00e9n garantiza que la infraestructura subyacente de la aplicaci\u00f3n siga siendo funcional y eficiente.<\/p>\n<p>Tambi\u00e9n puedes consultar el blog de Kinsta para conocer otros conceptos interesantes sobre <a href=\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\">Laravel<\/a> y otras tecnolog\u00edas web. Los <a href=\"https:\/\/sevalla.com\/application-hosting\/\">servicios de alojamiento<\/a> asequibles y sin problemas son muy recomendables para las necesidades de tu aplicaci\u00f3n y de tu equipo.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>La limitaci\u00f3n de velocidad es fundamental para proteger los recursos de una aplicaci\u00f3n o sitio web de un uso excesivo o indebido. Ya sea resultado de &#8230;<\/p>\n","protected":false},"author":290,"featured_media":69256,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1270,1303],"class_list":["post-69255","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel<\/title>\n<meta name=\"description\" content=\"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel\" \/>\n<meta property=\"og:description\" content=\"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-21T13:23:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-29T10:12:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcia Ramos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel\",\"datePublished\":\"2023-08-21T13:23:57+00:00\",\"dateModified\":\"2023-08-29T10:12:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/\"},\"wordCount\":2448,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/\",\"name\":\"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg\",\"datePublished\":\"2023-08-21T13:23:57+00:00\",\"dateModified\":\"2023-08-29T10:12:00+00:00\",\"description\":\"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"caption\":\"Marcia Ramos\"},\"description\":\"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/marciadiasramos\/\"],\"honorificSuffix\":\"B.Sc.\",\"gender\":\"Female\",\"knowsLanguage\":[\"English\",\"Portuguese\"],\"jobTitle\":\"Editorial Team Lead\",\"worksFor\":\"Kinsta Inc.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel","description":"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel","og_description":"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.","og_url":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-08-21T13:23:57+00:00","article_modified_time":"2023-08-29T10:12:00+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Marcia Ramos","Tiempo de lectura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel","datePublished":"2023-08-21T13:23:57+00:00","dateModified":"2023-08-29T10:12:00+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/"},"wordCount":2448,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/","url":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/","name":"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg","datePublished":"2023-08-21T13:23:57+00:00","dateModified":"2023-08-29T10:12:00+00:00","description":"Explora c\u00f3mo a\u00f1adir limitaci\u00f3n de velocidad a una API en una aplicaci\u00f3n Laravel y mitigar la explotaci\u00f3n de los recursos de tu aplicaci\u00f3n.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-throttle.jpg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-throttle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/es\/secciones\/laravel\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo A\u00f1adir Limitaci\u00f3n de Velocidad a una API en una Aplicaci\u00f3n Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","caption":"Marcia Ramos"},"description":"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.","sameAs":["https:\/\/www.linkedin.com\/in\/marciadiasramos\/"],"honorificSuffix":"B.Sc.","gender":"Female","knowsLanguage":["English","Portuguese"],"jobTitle":"Editorial Team Lead","worksFor":"Kinsta Inc.","url":"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=69255"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69255\/revisions"}],"predecessor-version":[{"id":69494,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69255\/revisions\/69494"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/fr"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/es"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/translations\/de"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69255\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/69256"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=69255"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=69255"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=69255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}