Ինչպես շնչափող API-ն Django Rest Framework-ով


Հանրահայտ Django Rest Framework-ի (DRF) օգտագործմամբ API-ներ կառուցելու ոլորտում պետք է հմտորեն կողմնորոշվել առաջադրված մարտահրավերների մեջ: կառավարելով այն արագությունը, որով հաճախորդները կարող են սանձազերծել իրենց հարցումների տարափը ձեր API-ի վերջնակետերի վրա: Խափանման մեխանիզմները օգնության են հասնում՝ արդյունավետորեն պաշտպանելով հնարավոր չարաշահումներից, պաշտպանելով թանկարժեք ռեսուրսները և խրախուսելով հաճախորդների միջև արդար օգտագործման միջավայրը: Այս խորը դիսկուրսում մենք կսկսենք լուսավոր ճամփորդություն՝ ուսումնասիրելով ձեր DRF-ով աշխատող API-ի ներսում շնչափող տեխնիկայի ներդրման բազմակողմանի ոլորտը: Պատրաստվեք ձեր տրամադրության տակ գտնվող ներկառուցված շնչափող դասերի հրապուրիչ հետազոտության, ինչպես նաև ձեր եզակի կարիքներին հարմարեցված հատուկ կանոնների մշակման բարդ արվեստի համար:

Ներկառուցված շնչափող դասընթացների հրաշալի պանթեոն

Django Rest Framework-ի հոյակապ ոլորտում, ներկառուցված շնչափող դասերի իսկական եղջյուրը սպասում է ձեր ուսումնասիրությանը: Եկեք բացահայտենք այս ակնածանք ներշնչող դասերից մի քանիսը, որոնցից յուրաքանչյուրն ունի իր հստակ նպատակը.

  • AnonRateThrottle. Այս դասը սահմանափակում է հարցումների քանակը, որոնք անանուն (չնույնականացված) հաճախորդները կարող են կատարել որոշակի ժամկետում:

  • UserRateThrottle. Այս դասը սահմանափակում է հարցումների քանակը, որոնք վավերացված հաճախորդները կարող են կատարել տվյալ ժամանակային միջակայքում:

  • ScopedRateThrottle. այս դասի միջոցով դուք կարող եք սահմանել ձեր API-ի տարբեր մասերի հատուկ դրոշմակնիքները՝ օգտագործելով շրջանակները:

Այս հոյակապ թրթլինգ դասերի իրական ներուժը բացելու համար դուք պարզապես պետք է դրանք ինտեգրեք ձեր Django նախագծի settings.py ֆայլի նշանավոր գոբելենին, որը տեղակայված է REST_FRAMEWORK կարգավորումների ջերմ գրկում:

Կարգավորել Throttling. Ձեր DRF-ի վրա հիմնված API-ի համար throttling կարգավորելու համար հետևեք հետևյալ քայլերին.

  • Բացեք ձեր նախագծի settings.py ֆայլը:

  • Գտեք REST_FRAMEWORK բառարանը և ավելացրեք ցանկալի կլանման դասերը DEFAULT_THROTTLE_CLASSES ցանկում:

  • Սահմանեք շնչահեղձության տեմպերը DEFAULT_THROTTLE_RATES բառարանում, յուրաքանչյուր դասի հետ փոխկապակցելով դրույքաչափը:

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
        'rest_framework.throttling.ScopedRateThrottle',
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/hour',
        'user': '1000/day',
        'custom': '50/hour',
    }
}

Այս օրինակում մենք սահմանել ենք շնչառության հետևյալ դրույքաչափերը.

  • Անանուն հաճախորդները կարող են ժամում կատարել մինչև 100 հարցում:

  • Նույնականացված հաճախորդները կարող են օրական կատարել մինչև 1000 հարցում:

  • Հատուկ շրջանակը թույլ է տալիս ժամում 50 հարցում:

Դիտումների վրա Throttling-ի կիրառում. Դիտումների վրա դրոշմման կանոնները կարող են կիրառվել երկու եղանակով՝ դասակարգային և ֆունկցիաների վրա հիմնված դիտումներ:

1. Դասարանի վրա հիմնված տեսակետներ

  • Օգտագործեք throttle_classes հատկանիշը ձեր դիտման դասում և նշեք ցանկալի throttling դասերը:

  • Բացի այդ, դուք կարող եք սահմանել throttle_scope հատկանիշը, որպեսզի նշեք հատուկ շրջանակ ScopedRateThrottle-ի համար:

Դասի վրա հիմնված դիտումների օգտագործման օրինակ

from rest_framework.throttling import UserRateThrottle, ScopedRateThrottle
from rest_framework.views import APIView

class MyApiView(APIView):
    throttle_classes = [UserRateThrottle, ScopedRateThrottle]
    throttle_scope = 'custom'

    def get(self, request):
        # Your view logic here
        pass

2. Գործառույթների վրա հիմնված տեսակետներ

  • Օգտագործեք @throttle_classes դեկորատորը ձեր դիտման ֆունկցիայի վրա և տրամադրեք ցանկալի throttleling դասերը:

Օրինակ՝ օգտագործելով գործառույթների վրա հիմնված դիտումներ

from rest_framework.throttling import UserRateThrottle, ScopedRateThrottle
from rest_framework.decorators import api_view, throttle_classes

@api_view(['GET'])
@throttle_classes([UserRateThrottle, ScopedRateThrottle])
def my_api_view(request):
    # Your view logic here
    pass

Custom Throttling-ի ստեղծում. Եթե ներկառուցված throttling դասերը չեն բավարարում ձեր պահանջներին, կարող եք ստեղծել հատուկ throttling դասեր՝ ընդլայնելով SimpleRateThrottle դասը և կիրառելով get_cache_key() մեթոդը: Scope հատկանիշը սահմանում է մաքսային throttling դասի շրջանակը:

Պատվիրված շնչափող դասի օրինակ

from rest_framework.throttling import SimpleRateThrottle

class CustomThrottle(SimpleRateThrottle):
    scope = 'custom'

    def get_cache_key(self, request, view):
        # Custom logic to generate the cache key
        pass

Throttling-ը չի տալիս օգտվողին տեսանելի ելք: Փոխարենը, այն պարտադրում է տոկոսադրույքի սահմանափակումներ API հարցումների վրա:

Օրինակ, եթե հաճախորդը գերազանցում է UserRateThrottle-ի կողմից սահմանված տոկոսադրույքի սահմանաչափը, սերվերը կվերադարձնի HTTP պատասխանը, որը նման է հետևյալին.

HTTP/1.1 429 Too Many Requests
Content−Type: application/json
Retry−After: 60
{
    "detail": "Request was throttled. Expected availability in 60 seconds."
}

Եզրակացություն

Եվ այսպես, հարգելի ընթերցող, մենք ավարտում ենք մեր հիասթափեցնող արշավը Django Rest Framework-ի միջոցով API-ի թուլացման ոլորտներում: Մենք բացահայտեցինք ներկառուցված շնչափող դասերի գաղտնիքները, զորացրինք մեզ կոնֆիգուրացիայի մասին գիտելիքներով և ուսումնասիրեցինք մեր հոյակապ հայացքների վրա թրթլինգ կիրառելու արվեստը: Ավելին, մենք տեսանք անսահման ներուժը` ստեղծելով մեր սեփական պատվերով շնչափող պարապմունքները` կյանք տալով մեր ստեղծագործական տեսլականներին: