如何在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里难以维护,可以拆分到独立路由文件:
- 在
routes目录下新建两个独立路由文件:api_v1.php、api_v2.php,分别存放对应版本的路由规则 - 编辑
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
相关产品推荐
相关产品推荐

