ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Laravel】接口的访问频率限制器 [打印本页]

作者: 惊落一身雪    时间: 前天 22:27
标题: 【Laravel】接口的访问频率限制器
Laravel 接口的访问频率,你可以在 Laravel 中利用速率限制器(Rate Limiter)。以下是一个具体的步调,展示怎样为这个特定的 API 路由设置速率限制:
1. 配置 RouteServiceProvider

首先,确保在 App\Providers\RouteServiceProvider 中配置速率限制器。你可以为特定的路由界说自界说速率限制器。
示例代码:

  1. namespace App\Providers;
  2. use Illuminate\Cache\RateLimiting\Limit;
  3. use Illuminate\Support\Facades\RateLimiter;
  4. use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
  5. use Illuminate\Http\Request;
  6. class RouteServiceProvider extends ServiceProvider
  7. {
  8.     protected function configureRateLimiting()
  9.     {
  10.         RateLimiter::for('manage_home', function (Request $request) {
  11.             return Limit::perMinute(10)->by(optional($request->user())->id ?: $request->ip());
  12.         });
  13.     }
  14.     public function map()
  15.     {
  16.         $this->configureRateLimiting();
  17.         $this->mapApiRoutes();
  18.     }
  19.     protected function mapApiRoutes()
  20.     {
  21.         Route::prefix('api')
  22.             ->middleware('api')
  23.             ->namespace($this->namespace)
  24.             ->group(base_path('routes/api.php'));
  25.     }
  26. }
复制代码
2. 应用速率限制器到路由

在 routes/web.php 或 routes/api.php 中,利用 throttle 中间件来应用速率限制器到你的特定路由。
示例代码:

  1. use Illuminate\Support\Facades\Route;
  2. use App\Http\Controllers\ManageController;
  3. Route::middleware(['throttle:manage_home'])->group(function () {
  4.     Route::get('/manage/home', [ManageController::class, 'home']);
  5. });
复制代码
3. 创建控制器

假设你有一个 ManageController 来处理 /manage/home 路由请求。
示例代码:

  1. namespace App\Http\Controllers;
  2. use Illuminate\Http\Request;
  3. class ManageController extends Controller
  4. {
  5.     public function home(Request $request)
  6.     {
  7.         // 执行你的逻辑
  8.         return response()->json([
  9.             'message' => 'Home management data',
  10.             'data' => [
  11.                 // 你的数据
  12.             ]
  13.         ]);
  14.     }
  15. }
复制代码
4. 测试速率限制

利用 Postman 或 cURL 来测试 /manage/home 路由的速率限制功能。
利用 Postman 测试:

利用 cURL 测试:

  1. for i in {1..15}; do curl -X GET http://your-app-url/manage/home; done
复制代码
5. 自界说速率限制响应

你可以自界说当请求被限速时返回的响应。在 App\Exceptions\Handler.php 中,添加对 ThrottleRequestsException 的处理:
示例代码:

  1. namespace App\Exceptions;
  2. use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
  3. use Throwable;
  4. use Illuminate\Http\Exceptions\ThrottleRequestsException;
  5. class Handler extends ExceptionHandler
  6. {
  7.     public function render($request, Throwable $exception)
  8.     {
  9.         if ($exception instanceof ThrottleRequestsException) {
  10.             return response()->json([
  11.                 'message' => 'Too many requests, please slow down.',
  12.                 'retry_after' => $exception->getHeaders()['Retry-After'],
  13.             ], 429);
  14.         }
  15.         return parent::render($request, $exception);
  16.     }
  17. }
复制代码
通过这些步调,你可以在 Laravel 中为接口实现访问频率控制。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4