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.php
和 api.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)和自己的会话中间件
我有一个简单的问题 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.php
和 api.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)和自己的会话中间件