You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中实现带版本控制的API路由

Laravel API路由版本化分组配置方案

以下是两种常用的实现方案,可根据项目路由规模选择:


方法1:直接在routes/api.php中嵌套分组(适合小型项目)

直接用Laravel路由自带的prefix方法给不同版本路由统一加前缀,示例代码如下:

<?php
use Illuminate\Support\Facades\Route;

// v1版本接口分组
Route::prefix('v1')->group(function () {
    // 该闭包内所有路由自动带/api/v1前缀
    Route::get('something', [\App\Http\Controllers\Api\V1\SomethingController::class, 'index']);
    // 其余v1版本路由都写在这里
    Route::post('user/login', [\App\Http\Controllers\Api\V1\AuthController::class, 'login']);
});

// v2版本接口分组
Route::prefix('v2')->group(function () {
    // 该闭包内所有路由自动带/api/v2前缀
    Route::get('something', [\App\Http\Controllers\Api\V2\SomethingController::class, 'index']);
    // 其余v2版本路由都写在这里
});

建议对应控制器也按版本拆分目录存放,比如app/Http/Controllers/Api/V1、app/Http/Controllers/Api/V2,方便后续维护。


方法2:拆分不同版本路由到独立文件(适合中大型项目)

如果各版本路由数量很多,都堆在api.php里难以维护,可以拆分到独立路由文件:

  1. 在routes目录下新建两个独立路由文件:api_v1.php、api_v2.php,分别存放对应版本的路由规则
  2. 编辑app/Providers/RouteServiceProvider.php,修改路由注册逻辑:
$this->routes(function () {
    // 注册v1版本路由
    Route::middleware('api')
        ->prefix('api/v1')
        ->group(base_path('routes/api_v1.php'));

    // 注册v2版本路由
    Route::middleware('api')
        ->prefix('api/v2')
        ->group(base_path('routes/api_v2.php'));

    // 若需要保留无版本的通用接口,可保留原有api.php的注册逻辑
    Route::middleware('api')
        ->prefix('api')
        ->group(base_path('routes/api.php'));
});

配置完成后,你在api_v1.php里定义的Route::get('something',...)路由,访问路径就会自动变成/api/v1/something。

可选优化

你还可以给不同版本的路由组统一加命名空间前缀,避免每次写控制器都补全长路径,比如在注册v1路由时加->namespace('App\Http\Controllers\Api\V1'),后续在api_v1.php里写路由时控制器可以直接简化为[SomethingController::class, 'index']。


内容的提问来源于stack exchange,提问作者Hellsontime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:04