7 Maret 2023 • uyab

Membuat Dynamic Routes di Laravel


Introduksi

Dalam salah satu proyek yang pernah kami kerjakan, ada kebutuhan dimana admin bisa mendaftarkan endpoint API (route) secara dinamis. Endpoint tersebut akan mengembalikan data sesuai SQL query yang didaftarkan oleh admin.

Cara 1: Daftarkan Semua Routes

$customRoutes = DB::table('endpoint_apis')->get();
foreach ($customRoutes as $row) {
    $method = $row->method;
    Route::$method($row->endpoint, 'App\Http\Controllers\Api\DynamicRouteHandler');
}

Kelebihan

Kekurangan

Cara 2: Daftarkan Satu Route Saja

Route::any('{any}', 'App\Http\Controllers\Api\DynamicRouteHandler')->where('any', '.*');

Bagian where('any', '.*') merupakan salah satu poin penting dari kode di atas, karena regex tersebut memungkinkan dynamic route untuk memiliki format nested:

Cara kedua ini bisa dioptimasi lagi, misalkan dengan menambah prefix khusus untuk semua dynamic route:

Route::any('custom/{any}', 'App\Http\Controllers\Api\DynamicRouteHandler')->where('any', '.*');

Dengan menambahkan hardcoded prefix di awal, bisa mengurangi cost yang dibutuhkan Laravel untuk mencari route yang cocok ketika framework sedang proses booting.

Kelebihan

Kekurangan

Daftar newsletter yuk!

Kamu akan mendapatkan maksimal 1 email per minggu, berisi kumpulan informasi menarik seputar Laravel, PHP, dan teknologi web pada umumnya.

1000++ web artisan lain telah berlangganan, jangan kudet.