Navigation

Laravel

How to Group API Routes with a Prefix in Laravel

Organize Laravel API routes with prefixes for cleaner URLs and better route management. Perfect for API versioning and modular applications.

Table Of Contents

Problem

Your API routes are scattered and you need to organize them with consistent prefixes like /api/v1/ for better structure and versioning.

Solution

Use Route::prefix() to group routes with a common prefix:

// routes/api.php
Route::prefix('v1')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
    Route::post('/users', [UserController::class, 'store']);
    Route::get('/users/{user}', [UserController::class, 'show']);
});

// Generates: /api/v1/users, /api/v1/users/{user}

Combine with middleware and namespaces:

Route::prefix('v1')
    ->middleware(['auth:sanctum', 'throttle:60,1'])
    ->name('api.v1.')
    ->group(function () {
        Route::apiResource('users', UserController::class);
        Route::apiResource('posts', PostController::class);
    });

// Generates named routes: api.v1.users.index, api.v1.users.store, etc.

Multiple API versions:

// Version 1
Route::prefix('v1')->name('api.v1.')->group(function () {
    Route::get('/users', [V1\UserController::class, 'index']);
});

// Version 2
Route::prefix('v2')->name('api.v2.')->group(function () {
    Route::get('/users', [V2\UserController::class, 'index']);
});

Why It Works

Route prefixes prepend a string to all routes within the group. Laravel automatically combines the base /api prefix (from RouteServiceProvider) with your custom prefix. This creates clean, organized URLs while keeping your route definitions maintainable.

Advanced grouping with multiple attributes:

Route::group([
    'prefix' => 'admin/v1',
    'middleware' => ['auth:sanctum', 'admin'],
    'namespace' => 'Admin',
    'as' => 'admin.api.'
], function () {
    Route::get('/dashboard', 'DashboardController@index');
    Route::apiResource('users', 'UserController');
});

Related: Laravel Collections: Beyond Basic Array Operations | Database Design: Fundamentals of Good Database Architecture | Laravel API Development: Best Practices and Security | Implementing API Versioning in Laravel: Multiple Strategies | Laravel Route Model Binding: Beyond the Basics

Share this article

Add Comment

No comments yet. Be the first to comment!

More from Laravel