0Pricing
PHP Academy · درس

تحديد معدل الطلبات وإصدار API

قيّدوا الطلبات باستخدام RateLimiter وأصدروا نسخ API بطريقة واضحة

تحديد معدل الطلبات وإصدار API درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

لماذا نستخدم تحديد معدل الطلبات؟

يحمي تحديد معدل الطلبات واجهات API من إساءة الاستخدام وهجمات حجب الخدمة والعملاء الذين يرسلون طلبات مفرطة. كما يضمن توزيع الموارد بعدالة بين جميع المستخدمين.

Throttle المضمّن في Laravel

طبّق البرامج الوسيطة throttle للحد من عدد الطلبات ضمن نافذة زمنية.

<?php
Route::middleware("throttle:60,1")->group(function () {
    // 60 requests per 1 minute per user/IP
    Route::apiResource("posts", PostController::class);
});

محددات معدل الطلبات المخصصة

عرّف محددات مسماة لمعدل الطلبات بمنطق مخصص داخل مزود خدمة.

<?php
// In AppServiceProvider::boot():
RateLimiter::for("api", function (Request $request) {
    return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});

// Apply:
Route::middleware("throttle:api")->group(fn() => ...);

تحديد معدل الطلبات متعدد المستويات

أرجع حدودًا مختلفة استنادًا إلى خطة المستخدم المصادق عليه.

<?php
RateLimiter::for("api", function (Request $request) {
    return match($request->user()?->plan) {
        "pro"  => Limit::perMinute(300)->by($request->user()->id),
        "free" => Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()),
        default => Limit::perMinute(30)->by($request->ip()),
    };
});

رؤوس استجابة تحديد معدل الطلبات

عند تقييد الطلبات، يعيد Laravel الحالة HTTP 429 مع الرؤوس التالية: X-RateLimit-Limit، وX-RateLimit-Remaining، وRetry-After.

استراتيجيات إصدار API

ثلاثة أساليب شائعة:

  1. بادئة URL: /api/v1/users
  2. معلمة استعلام: /api/users?version=1
  3. رأس Accept: Accept: application/vnd.myapp.v1+json

تُعد بادئة URL الأسلوب الأكثر شيوعًا في واجهات Laravel البرمجية.

إصدار API باستخدام بادئة URL

جمّع المسارات ضمن بادئة الإصدار.

<?php
Route::prefix("v1")->group(function () {
    Route::apiResource("users", \App\Http\Controllers\Api\V1\UserController::class);
});

Route::prefix("v2")->group(function () {
    Route::apiResource("users", \App\Http\Controllers\Api\V2\UserController::class);
});

وحدات تحكم خاصة بكل إصدار

نظّم وحدات التحكم حسب الإصدار داخل أدلة فرعية: App\Http\Controllers\Api\V1\ وApp\Http\Controllers\Api\V2\.

إيقاف الإصدارات القديمة

أضف رأس Deprecation أو Sunset إلى استجابات الإصدارات القديمة لإبلاغ العملاء بإزالتها الوشيكة.

<?php
// Middleware for v1 routes:
$response->headers->set("Deprecation", "version="v1"");
$response->headers->set("Sunset", "2026-01-01");

موارد API وإصداراتها

استخدم موارد API الخاصة بكل إصدار: V1\UserResource وV2\UserResource لتشكيل هياكل استجابة مختلفة لكل إصدار.

اختبار حدود معدل الطلبات

في الاختبارات، زيّف محدد معدل الطلبات لتجنب تداخل الاختبارات.

<?php
RateLimiter::shouldReceive("tooManyAttempts")->andReturn(false);

الملخص

طبّق throttle:60,1 لتحديد معدل الطلبات الأساسي. استخدم RateLimiter::for() للحدود المخصصة ومتعددة المستويات. أصدِر واجهات API باستخدام بادئات URL ووحدات تحكم وموارد خاصة بكل إصدار.

تحقق سريع

ما رمز حالة HTTP الذي يعيده Laravel عند تجاوز حد معدل الطلبات؟

الأسئلة الشائعة

هل درس «تحديد معدل الطلبات وإصدار API» مجاني؟

نعم — نص درس «تحديد معدل الطلبات وإصدار API» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «تحديد معدل الطلبات وإصدار API»؟

قيّدوا الطلبات باستخدام RateLimiter وأصدروا نسخ API بطريقة واضحة تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «تحديد معدل الطلبات وإصدار API»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مسارات API ووحدات تحكم الموارد
  2. موارد API واستجابات JSON
  3. المصادقة باستخدام Laravel Sanctum
  4. تحديد معدل الطلبات وإصدار API
← العودة إلى PHP Academy