Laravel 接口的访问频率,你可以在 Laravel 中利用速率限制器(Rate Limiter)。以下是一个具体的步调,展示怎样为这个特定的 API 路由设置速率限制:
1. 配置 RouteServiceProvider
首先,确保在 App\Providers\RouteServiceProvider 中配置速率限制器。你可以为特定的路由界说自界说速率限制器。
示例代码:
- namespace App\Providers;
- use Illuminate\Cache\RateLimiting\Limit;
- use Illuminate\Support\Facades\RateLimiter;
- use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
- use Illuminate\Http\Request;
- class RouteServiceProvider extends ServiceProvider
- {
- protected function configureRateLimiting()
- {
- RateLimiter::for('manage_home', function (Request $request) {
- return Limit::perMinute(10)->by(optional($request->user())->id ?: $request->ip());
- });
- }
- public function map()
- {
- $this->configureRateLimiting();
- $this->mapApiRoutes();
- }
- protected function mapApiRoutes()
- {
- Route::prefix('api')
- ->middleware('api')
- ->namespace($this->namespace)
- ->group(base_path('routes/api.php'));
- }
- }
复制代码 2. 应用速率限制器到路由
在 routes/web.php 或 routes/api.php 中,利用 throttle 中间件来应用速率限制器到你的特定路由。
示例代码:
- use Illuminate\Support\Facades\Route;
- use App\Http\Controllers\ManageController;
- Route::middleware(['throttle:manage_home'])->group(function () {
- Route::get('/manage/home', [ManageController::class, 'home']);
- });
复制代码 3. 创建控制器
假设你有一个 ManageController 来处理 /manage/home 路由请求。
示例代码:
- namespace App\Http\Controllers;
- use Illuminate\Http\Request;
- class ManageController extends Controller
- {
- public function home(Request $request)
- {
- // 执行你的逻辑
- return response()->json([
- 'message' => 'Home management data',
- 'data' => [
- // 你的数据
- ]
- ]);
- }
- }
复制代码 4. 测试速率限制
利用 Postman 或 cURL 来测试 /manage/home 路由的速率限制功能。
利用 Postman 测试:
- 打开 Postman。
- 创建一个新的 GET 请求,URL 为 http://your-app-url/manage/home。
- 多次发送请求,超过每分钟 10 次后,你应该会收到一个 429 状态码的响应。
利用 cURL 测试:
- for i in {1..15}; do curl -X GET http://your-app-url/manage/home; done
复制代码 5. 自界说速率限制响应
你可以自界说当请求被限速时返回的响应。在 App\Exceptions\Handler.php 中,添加对 ThrottleRequestsException 的处理:
示例代码:
- namespace App\Exceptions;
- use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
- use Throwable;
- use Illuminate\Http\Exceptions\ThrottleRequestsException;
- class Handler extends ExceptionHandler
- {
- public function render($request, Throwable $exception)
- {
- if ($exception instanceof ThrottleRequestsException) {
- return response()->json([
- 'message' => 'Too many requests, please slow down.',
- 'retry_after' => $exception->getHeaders()['Retry-After'],
- ], 429);
- }
- return parent::render($request, $exception);
- }
- }
复制代码 通过这些步调,你可以在 Laravel 中为接口实现访问频率控制。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |