Django

⌘K
  1. Home
  2. Django
  3. Django Rest Framework
  4. throttling

throttling

throttle_classes = [UserRateThrottle] ডজ্যাঙ্গো রেস্ট ফ্রেমওয়ার্কের (DRF) একটি বৈশিষ্ট্য, যা ব্যবহারকারী বা ক্লায়েন্টকে নির্দিষ্ট পরিমাণ অনুরোধ (API request) পাঠানোর হার সীমাবদ্ধ (throttle) করতে সহায়তা করে। এটি মূলত API-তে অস্বাভাবিকভাবে বেশি পরিমাণ রিকোয়েস্ট পাঠানোর হাত থেকে রক্ষা করে এবং সার্ভারের লোড কমাতে সাহায্য করে।

এখন UserRateThrottle কীভাবে কাজ করে, তা ব্যাখ্যা করা যাক:

কিভাবে কাজ করে:

  1. রেট লিমিটিং (Rate Limiting):
    • UserRateThrottle ব্যবহার করে আপনি প্রতিটি ব্যবহারকারীর জন্য নির্দিষ্ট সময়ের মধ্যে কতগুলো অনুরোধ অনুমোদিত হবে তা নির্ধারণ করতে পারেন।
    • উদাহরণস্বরূপ, আপনি যদি ঠিক করেন যে একজন ব্যবহারকারী প্রতি মিনিটে সর্বাধিক ১০টি API রিকোয়েস্ট করতে পারবে, তাহলে ১০টির বেশি রিকোয়েস্ট হলে ব্যবহারকারীকে একটি “429 Too Many Requests” ত্রুটি বার্তা পাঠানো হবে।
  2. ইউজার ভিত্তিক থ্রটলিং:
    • UserRateThrottle ব্যবহারকারীর উপর ভিত্তি করে কাজ করে। এর মানে হলো, প্রতিটি পৃথক ব্যবহারকারীর জন্য আলাদা রেট লিমিট প্রয়োগ হবে।
    • ব্যবহারকারীর শনাক্তকরণ করার জন্য ডজ্যাঙ্গো সাধারণত তার username বা authentication token ব্যবহার করে।
  3. কনফিগারেশন (Configuration):
    • আপনি UserRateThrottle ক্লাস ব্যবহার করে রেট লিমিট কনফিগার করতে পারেন। DRF এর সেটিংসে DEFAULT_THROTTLE_RATES এর মাধ্যমে আপনি সারা অ্যাপ্লিকেশনের জন্য গ্লোবাল লিমিটও নির্ধারণ করতে পারবেন।
    উদাহরণ:
# settings.py ফাইলে
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
        'user': '10/minute',  # প্রতি মিনিটে ১০টি রিকোয়েস্ট
    }
}

উদাহরণ:

আপনি যদি একটি ভিউসেটে throttle_classes ব্যবহার করেন, তাহলে এরকম হবে:

from rest_framework.throttling import UserRateThrottle

class EmployeeViewSet(viewsets.ModelViewSet):
    queryset = Employee.objects.all()
    serializer_class = EmployeeSerializer
    authentication_classes = [JWTAuthentication]
    permission_classes = [IsAuthenticated]
    throttle_classes = [UserRateThrottle]  # এখানে থ্রটল ক্লাস প্রয়োগ হচ্ছে

    # বাকি মেথডগুলো

সুবিধা:

  • API সুরক্ষা: এটি API-কে অপ্রয়োজনীয় লোড থেকে রক্ষা করে এবং সার্ভারকে অতিরিক্ত চাপ থেকে বাঁচায়।
  • ডিডস আক্রমণ প্রতিরোধ: অনাকাঙ্ক্ষিত বা ডিস্ট্রিবিউটেড ডিনায়েল অফ সার্ভিস (DDoS) আক্রমণ প্রতিরোধে সাহায্য করে, কারণ নির্দিষ্ট সময়ের মধ্যে একটি ব্যবহারকারীর রিকোয়েস্ট সংখ্যা সীমিত থাকে।
  • ফেয়ার ইউজার এক্সেস: এটি নিশ্চিত করে যে সব ব্যবহারকারী নির্দিষ্ট রেটের মধ্যে API ব্যবহার করতে পারবে, এবং কেউ অতিরিক্ত ব্যবহার করতে পারবে না।

এভাবে UserRateThrottle সিস্টেমকে স্থিতিশীল ও সুরক্ষিত রাখার জন্য কার্যকর একটি উপায়।

How can we help?