如何解决api中间件在laravel中的作用是什么
我在 laravel8 中有一个简单的问题
我测试了两个代码,但没有发现任何差异。他们对我来说看起来一样。即使我点击了大量时间,但都给了我“太多请求”。
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/分钟)。
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 个不同的可验证实体(管理员、所有者、用户、审计...) ) 每个都有自己的命名空间(控制器基命名空间)和自己的会话中间件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。