api 中间件在 laravel 中的作用是什么

what is the role of api middleware in laravel

我有一个简单的问题 laravel8

我测试了两个代码,但没有发现任何差异。他们对我来说看起来一样。甚至我点击了很多时间都给了我 'too many requests'.

Route::middleware('api')->get('/user', function (Request $request) {
    return "aaa";
});

Route::get('/user', function (Request $request) {
    return "aaa";
});

'throttle:api' 和 SubstitueBindings 的作用是什么?

    'api' => [
        'throttle:api',
        \Illuminate\Routing\Middleware\Substitu\Illuminate\Routing\Middleware\SubstituteBindings::classteBindings::class,
    ],

在同一个文件 kernel.php 中,您会找到 web 请求的中间件,这是默认模式。

'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

因此 web 用于有状态请求,带有会话、cookie、csrf 令牌、会话身份验证....

api用于无状态请求,因此没有上述功能,但有另一个中间件throttle,它通过IP限制每分钟的请求数(检查配置对于限制,默认 60/mn).

SubstituteBindings 两者通用,它处理路由声明中配置的参数的绑定。

通常,您不会将这两个堆叠在一起。要使用它们,请使用已经存在的文件 web.phpapi.php。这是如何运作的 ?查看App\Providers\RouteServiceProvider

的内容
public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace) //the value here is \App\Http\Controllers
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

如果您的项目可以分成多个组,您可以编辑此文件。

例如,我曾经用它创建了 5 个不同的组,每个组都有自己的路由文件,因为我在通用实体之上有 4 个不同的可验证实体(管理员、所有者、用户、审计...) (web) 每个都有自己的命名空间(controller base namespace)和自己的会话中间件