本文目录导读:

在 Laravel 中,网关路由通常是指API 网关模式或路由分组的高级配置,主要用于统一管理微服务入口、实现请求转发、权限校验或版本控制。
根据你的具体需求,常见的有以下几种配置方式:
基础路由分组(API 网关雏形)
最基础的“网关”就是将多个路由统一放在一个前缀下:
// routes/api.php
Route::prefix('v1')->group(function () {
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::get('/products', [ProductController::class, 'index']);
});
Route::prefix('v2')->group(function () {
Route::get('/users', [UserControllerV2::class, 'index']);
});
访问:/api/v1/users 或 /api/v2/users
中间件网关(权限/认证校验)
使用中间件作为网关层,统一校验后才放行到具体路由:
Route::prefix('api')->group(function () {
// 公开接口(无需认证)
Route::post('/login', [AuthController::class, 'login']);
Route::post('/register', [AuthController::class, 'register']);
// 需要认证的接口(通过中间件网关)
Route::middleware(['auth:sanctum', 'throttle:60,1'])->group(function () {
Route::get('/user/profile', [UserController::class, 'profile']);
Route::post('/orders', [OrderController::class, 'store']);
// 管理员专用
Route::middleware('role:admin')->group(function () {
Route::get('/admin/users', [AdminController::class, 'listUsers']);
});
});
});
动态路由转发(微服务网关)
如果需要将请求转发到其他微服务,可以自定义一个网关路由:
// routes/api.php
Route::any('/gateway/{service}/{path}', function ($service, $path) {
// 定义服务映射
$services = [
'users' => 'http://user-service/api/',
'orders' => 'http://order-service/api/',
'payments' => 'http://payment-service/api/',
];
if (!isset($services[$service])) {
return response()->json(['error' => 'Service not found'], 404);
}
$targetUrl = $services[$service] . $path;
// 转发请求(使用 GuzzleHttp 或 Laravel HTTP Client)
$response = Http::withHeaders(request()->headers->all())
->send(request()->method(), $targetUrl, [
'query' => request()->query(),
'body' => request()->all()
]);
return $response->json();
});
使用 Laravel 网关包
对于生产环境,建议使用成熟的网关包:
A. Laravel API Gateway (by renoki-co)
composer require renoki-co/laravel-api-gateway
配置 config/gateway.php:
'gateways' => [
'api' => [
'routes' => [
'/users' => [
'target' => 'http://user-service/api/users',
'method' => ['GET', 'POST'],
],
],
'middleware' => ['auth:api'],
'prefix' => '/api/v1',
],
],
B. Laravel Kong Gateway 集成
如果使用 Kong 作为网关,只需配置 Laravel 正常输出 API,Kong 负责转发:
# Kong 配置示例 curl -i -X POST http://localhost:8001/services \ --data "name=laravel-api" \ --data "url=http://laravel-app/api" curl -i -X POST http://localhost:8001/services/laravel-api/routes \ --data "paths[]=/api"
自定义路由加载器
对于大型项目,可以按模块自动加载路由:
// App\Providers\RouteServiceProvider.php
public function boot()
{
parent::boot();
// 自动加载 Modules 目录下的路由
foreach (glob(app_path('Modules/*/routes/api.php')) as $routeFile) {
Route::prefix('api/v1')
->middleware('api')
->group($routeFile);
}
}
推荐的最佳实践
对于生产环境,建议:
- 小项目:使用 Laravel 自带的路由分组 + 中间件
- 中大型项目:使用 Kong、Nginx 或 AWS API Gateway 作为外部网关
- 微服务架构:使用 Laravel API Gateway 包 或自定义 Http 转发
核心要点:
- 路由分组定义入口
- 中间件实现认证/限流
- 转发到具体服务(或直接使用 Laravel 控制器)
- 统一错误处理
需要根据你的实际架构选择最适合的方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播