Laravel 12 Rate Limiting: Alasan Kenapa Aplikasimu Membutuhkan Fitur Ini

logo icon

Admin Teguh

-

04 September 2025

Laravel 12 Rate Limiting: Alasan Kenapa Aplikasimu Membutuhkan Fitur Ini

Dalam mengembangkan aplikasi web modern, menjaga keamanan dan performa sistem menjadi prioritas utama. Salah satu fitur unggulan di Laravel yang mendukung hal ini adalah fitur Rate Limiting. Fitur ini memungkinkan kita para developer untuk mengontrol jumlah request yang dapat dilakukan ke aplikasi dalam waktu tertentu.

Apa itu Rate Limiting?

Rate Limiting atau juga dikenal Rate Limiter adalah mekanisme untuk membatasi jumlah HTTP Request yang dapat dilakukan oleh pengguna atau alamat IP ke suatu endpoint dalam periode waktu tertentu. Tujuannya adalah untuk mencegah penyalahgunaan sumber daya, melindungi aplikasi dari cyber attack seperti brute force, dan menjaga performa server agar tetap optimal.

Di Laravel 12, fitur Rate Limiting telah ditingkatkan dengan kemampuan yang lebih fleksibel, termasuk dukungan untuk pembatasan request per detik, tidak hanya per menit seperti pada versi sebelumnya.

Bagaimana Rate Limiting Bekerja?

Laravel 12 menyediakan middleware bawaan bernama throttle yang mempermudah penerapan Rate Limiting. Middleware ini memungkinkan kita untuk menentukan batas jumlah permintaan dan durasi waktu dengan pendeketan yang sederhana. Berikut adalah cara kerja dasar rate limiting di Laravel:

  1. Rate Limiting dapat diterapkan berdasarkan alamat IP, ID pengguna, atau kombinasi lainnya.
  2. Developer menentukan jumlah maksimum permintaan yang diizinkan dalam periode waktu tertentu, misalnya 60 request per menit.
  3. Laravel menggunakan sistem cache untuk melacak jumlah permintaan dan waktu kedaluwarsa.
  4. Jika batas request terlampaui, Laravel akan mengembalikan respons HTTP 429 (Too Many Requests) secara otomatis.

Implementasi Rate Limiting di Laravel 12

Berikut adalah langkah-langkah implementasi Rate Limiting di Laravel 12:

  • Throttle Middleware

Cara paling sederhana yaitu menggunakan middleware throttle pada route.

Route::post('/login-process', [LoginController::class, 'process'])->middleware('throttle:10,1');

// group route
Route::middleware('throttle:10,1')->group(function () {
    // Routes
});

Kode diatas akan membatasi HTTP Request untuk login menjadi 10 request per menit.

  • Custom Rate Limiter

Jika memang membutuhkan kostumisasi pada Rate Limiter, kita bisa membuat kostumisasi tersebut melalui file /bootstrap/app.php atau AppServiceProvider.php pada method boot.

  • bootstrap/app.php
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        apiPrefix: '/api', // set prefix api routes
        then: function () {
            RateLimiter::for('api', function (Request $request) {
                return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
            });
        }
    )
    ->create();
  • AppServiceProvider.php
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;

public function boot(): void
{
    RateLimiter::for('api', function (Request $request) {
        return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
    });
}

Setelah itu definisikan ke middleware pada route.

use Illuminate\Support\Facades\Route;

Route::middleware('throttle:api')->group(function () {
   // Routes
});

Semua route yang berawalan /api akan dibatasi 60 request per menit berdasarkan ID penguna atau alamat IP.

  • Custom Error Message

Jika pengguna melampaui batas request, maka akan mendapatkan response 429 Too Many Request. Kita bisa melakukan kostumisasi pesan error tersebut pada file /bootstrap/app.php.

use Illuminate\RateLimiting\TooManyRequestsException;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        apiPrefix: '/api', // set prefix api routes
        then: function () {
            RateLimiter::for('api', function (Request $request) {
                return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
            });
        }
    )
	  ->withMiddleware()
	  ->withExceptions(function (Exceptions $exceptions) {
		  $exceptions->render(function (TooManyRequestsException $e) {
					return response()->json([
							'message' => 'Rate limit reached. Please wait a moment before trying again.'
					], 429);
			});
		})
    ->create();

Best Practices Menggunakan Rate Limiting

Agar implementasi Rate Limiting efektif, berikut beberapa tips yang dapat diikuti:

  • Tentukan batas permintaan yang sesuai dengan jenis endpoint. Misalnya, endpoint login mungkin memerlukan batasan lebih ketat (contoh: 10 permintaan per menit) dibandingkan endpoint publik.
  • Gunakan Redis untuk Skalabilitas: Redis adalah pilihan ideal untuk menyimpan data rate limiting karena kecepatan dan efisiensinya.
  • Pastikan pesan error yang ditampilkan mudah dipahami oleh pengguna, sehingga mereka tahu kapan bisa mencoba lagi.
  • Gunakan tools seperti Laravel Telescope atau log server untuk memantau pola permintaan dan menyesuaikan konfigurasi rate limiting jika diperlukan.

Baca Artikel Terkait Laravel Telescope

Kesimpulan

Rate Limiting pada Laravel 12 adalah fitur yang sangat powerful untuk menjaga keamanan dan performa dalam aplikasi yang kita kembangkan. Dengan middleware throttle dan API RateLimiter, kita dapat dengan mudah mengatur batasan permintaan sesuai kebutuhan, mulai dari batasan sederhana hingga konfigurasi kustom yang kompleks. Fitur ini tidak hanya mudah diterapkan, tetapi juga memberikan dampak besar dalam melindungi aplikasi dari cyber attack dan memastikan pengalaman pengguna yang optimal.

Terimakasih

Teguh Budi Laksono

Teguh Budi Laksono

"bukan orang sempurna, hanya seseorang yang terus belajar dan berusaha, karena ia percaya bahwa mimpi besar lahir dari proses panjang dan konsisten."

Tags :

larvel 12

rate limiting laravel 12

rate limiter

understanding rate limiting in laravel 12

how rate limiter work in laravel 12

security

learn coding with nganggurdev

web development

Suka dengan artikel di NganggurDev? Yuk, beri dukungan untuk penulis. Terima kasih banyak!

Want to read more? Click me!