Ինչպես շնչափող 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-ի թուլացման ոլորտներում: Մենք բացահայտեցինք ներկառուցված շնչափող դասերի գաղտնիքները, զորացրինք մեզ կոնֆիգուրացիայի մասին գիտելիքներով և ուսումնասիրեցինք մեր հոյակապ հայացքների վրա թրթլինգ կիրառելու արվեստը: Ավելին, մենք տեսանք անսահման ներուժը` ստեղծելով մեր սեփական պատվերով շնչափող պարապմունքները` կյանք տալով մեր ստեղծագործական տեսլականներին: