paint-brush
FastAPI में उपयोगकर्ताओं और तालिकाओं के लिए अलग-अलग थ्रॉटल कैसे बनाएंद्वारा@kaizenthecreator
2,190 रीडिंग
2,190 रीडिंग

FastAPI में उपयोगकर्ताओं और तालिकाओं के लिए अलग-अलग थ्रॉटल कैसे बनाएं

द्वारा Philip Ireoluwa Okiokio4m2023/02/07
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

FastAPI: उपयोगकर्ताओं और तालिकाओं के लिए अलग-अलग थ्रॉटल का निर्माण। यहाँ मेरे सामान्यीकरण का आधार है। यदि आपने मेरे किसी पिछले काम को पढ़ा है तो आपको पता होगा कि मेरा बैकएंड मूल Django (और इसके बाकी ढांचे) है, मैं इसकी दिशा और इसके डिजाइन पैटर्न के लिए आभारी हूं, उन्होंने मुझे मेरे उपयोग के मामले के अनुरूप पहिया को संशोधित करने की अनुमति दी है।
featured image - FastAPI में उपयोगकर्ताओं और तालिकाओं के लिए अलग-अलग थ्रॉटल कैसे बनाएं
Philip Ireoluwa Okiokio HackerNoon profile picture
0-item


सॉफ्टवेयर इंजीनियरिंग हमारे विचार से आसान है क्योंकि कभी-कभी उत्तर सरल होते हैं और कई बार हमारी आंखों के ठीक सामने होते हैं।


बैकएंड इंजीनियरिंग को समझने और प्रक्रियाओं के बारे में सोचने और सामान कैसे काम कर सकता है और कैसे काम करना चाहिए, इस बारे में FastAPI ने मेरी महत्वपूर्ण भूमिका निभाई है। यह एक बुद्धिमान उपकरण है, हालाँकि, यह पूरी तरह से आपकी रचनात्मकता और आपकी कल्पना की आँखों पर निर्भर है। यहाँ मेरे सामान्यीकरण का आधार है।


यदि आपने मेरा कोई पिछला काम पढ़ा है तो आपको पता होगा कि मेरा बैकएंड मूल Django (और इसके बाकी ढांचे) है, और मैं इसकी दिशा और इसके डिजाइन पैटर्न के लिए आभारी हूं, उन्होंने मुझे मेरे उपयोग के मामले के अनुरूप पहिया को संशोधित करने की अनुमति दी है।


बड़े होने पर मेरे पॉप को पता चला कि मेरा दिमाग हैरान था और मैं सामान बनाना चाहता था और मेरे पॉप ने हमेशा मुझसे कहा था कि तुम पहिए को फिर से नहीं लगा सकते, इसे संशोधित कर सकते हो।


मैंने एक बार डीआरएफ के साथ एक थ्रॉटल/दर-सीमित एप्लिकेशन या एंडपॉइंट पर काम किया और यह आश्चर्यजनक था, मैंने कुछ नया सीखा और मुझे दिलचस्पी थी (पहले मेरे करियर में)। इस मामले में थ्रॉटल ने उन समापन बिंदुओं को प्रभावित किया जिन पर मैंने इसे लागू किया था, हाल ही में मुझे FastAPI में कुछ ऐसा ही करने में दिलचस्पी थी, और मैंने सबसे पहले आसान रास्ता अपनाया (जीत के लिए Google) और देखा कि ऐसे पैकेज मौजूद हैं जो थ्रॉटल एक्शन करते हैं .


मैंने व्यक्तिगत रूप से महसूस किया कि उन्होंने वही आराम और अपनापन प्रदान किया जो मुझे तब मिला था जब मैंने Django का उपयोग किया था। वे उस लचीलेपन की पेशकश नहीं करते थे जो मैं चाहता था (या शायद मैं कुछ ओवरराइड करने के बारे में आलसी था), इसलिए मैंने फिर बैठकर एक समाधान तैयार किया। तो आइए कोड में देखें।


अस्वीकरण: मैं FastAPI के साथ आरंभ करने और गति बढ़ाने के लिए बहुत कुछ करने के बारे में जानकारी प्रदान नहीं करूंगा, मुझे लगता है कि आप ऐसा कर सकते हैं, यदि आप FastAPI ( , डॉक्टर ट्यूटोरियल ) के साथ आरंभ करने पर सर्वोत्तम संसाधनों की जांच नहीं कर सकते हैं।

डेमो एप्लिकेशन: Transact some Fintechy (बेअर बोन) ऐप।

कई चलने वाले हिस्सों को एक प्रवेश बिंदु सर्वर द्वारा आयोजित किया जाता है।


तो चलिए Tranzact नाम की एक तालिका बनाते हैं जिसका उपयोग Tranzact डेटा रिकॉर्ड बनाने के लिए किया जा सकता है और अलग-अलग Tranzact रिकॉर्ड की पहचान करने में सक्षम होने के लिए एक API-कुंजी उत्पन्न की जाएगी।


यह तालिका और एप्लिकेशन SQLAlchemy का लाभ उठाते हैं, इसलिए दस्तावेज़ देखें।


ट्रांज़ैक्ट टेबल, यह आदर्श रूप से model.py फ़ाइल में रहता है।


यहाँ राउटर है।

एपीआई राउटर जहां ट्रांज़ैक्ट के लिए रूट रहता है। आदर्श रूप से आपकी राउटर.py फ़ाइल में रहता है।


हम राउटर में CRUDy ऑपरेशन कर सकते हैं, (यदि एप्लिकेशन अजीब लगता है तो मैं यहां डिज़ाइन पैटर्न पर एक और पोस्ट करूंगा जिसे रिपॉजिटरी डिज़ाइन पैटर्न कहा जाता है)।


यह वह समापन बिंदु है जिससे API-कुंजी बोलती है, यह API कुंजी कुछ क्रियाओं को करने के लिए प्रमाणीकरण के रूप में कार्य करती है। हम जो देख सकते हैं वह एक निर्भरता है जो एक लेन-देन रिकॉर्ड की ओर इशारा करती है।


एक मार्ग जिसके लिए संचार के लिए एपीआई कुंजी की आवश्यकता होती है।


आइए tranzact_header निर्भरता की जाँच करें और कॉल्स की जाँच करें।

एक फ़ंक्शन जो अनुरोध शीर्षलेख के रूप में भेजे गए एपीआई-कुंजी की जांच करता है और एक एकल ट्रांजैक्ट रिकॉर्ड देता है।


यह API_Key को पहचानता है और api_key से संबद्ध ट्रांजैक्ट रिकॉर्ड लौटाता है।

तो व्यक्तिगत थ्रॉटलिंग की चुनौती को हल करने के लिए, मैंने ट्रांज़ैक्ट टेबल के लिए रिकॉर्ड बनाते समय इसे हल किया। मैं tranzact.id के साथ एक रिकॉर्ड बनाता हूं और ट्रांज़ैक्ट दर सीमा की तालिका में 0 के डिफ़ॉल्ट के साथ एक गिनती करता हूं। यहाँ नीचे दी गई तालिका है।



दर सीमा तालिका का एक स्निपेट और ट्रांज़ैक्ट मॉडल।


इसलिए इस समाधान के साथ, मुझे दर सीमा रिकॉर्ड को ट्रैक करने के तरीके की आवश्यकता थी, API_KEY के साथ हम प्रत्येक कॉल के आधार पर वृद्धिशील गिनती बढ़ा सकते हैं और फ्रीमियम भूमिका के आधार पर थ्रॉटल कर सकते हैं जो कि ट्रांसजैक्ट रिकॉर्ड है। यहाँ समारोह कैसा दिखता है।



तो इस फ़ंक्शन के साथ, हम कुछ क्यूए कर सकते हैं और ध्वज के आधार पर और गिनती के साथ जांच कर सकते हैं। यह api_header फ़ंक्शन पर निर्भर करता है। हम तब थ्रॉटल एपीआई दर सीमा फ़ंक्शन के साथ एपीआई कॉल एंडपॉइंट्स में निर्भरता को स्वैप करते हैं। हम ऐसा इसलिए कर सकते हैं क्योंकि वे दोनों एक ही Transact रिकॉर्ड लौटाते हैं। निर्भरता और FastAPI के साथ उनकी कॉल के बारे में अधिक समझने के लिए दस्तावेज़ीकरण के इस बिंदु को देखें।


यहाँ मेरे डाकिया में एक परीक्षण का मामला है।


डाकिया में मेरे संग्रह के लिए API_KEY की स्थापना।

संग्रह स्तर पर डाकिया में विचार एपीआई कुंजी सेट करना।


नीचे एक अनुरोध कॉल के लिए थ्रॉटल की गई प्रतिक्रिया है जो कैप्ड संख्या तक पहुंच गई है, जिसका अर्थ है कि एक अन्य api_key वांछित प्रतिक्रिया देने के लिए अलग तरह से प्रतिक्रिया देगी, साथ ही यदि ट्रांज़ेक्ट रिकॉर्ड प्रीमियम है तो यह थ्रॉटल चेक को बाय-पास कर देता है।


एपीआई कॉल के लिए थ्रॉटल एपीआई प्रतिक्रिया।


तो इस तरह मैंने एकवचन डीबी रिकॉर्ड थ्रॉटल बनाया, मेरे कार्यान्वयन के समापन चरण में सेलेरी बीट जॉब (एक निर्धारित नौकरी/कार्य) का उपयोग करना शामिल है ताकि सभी ट्रांजैक्ट दर सीमा रिकॉर्ड गिनती को घंटे पर शून्य पर वापस लाया जा सके। यह एक व्यक्तिगत कार्यान्वयन है जिसे अन्य लोग कर सकते हैं।


अंत में मेरी बातों को हल्के गर्म दिल से नीचे ले जाइए लेकिन यह मेरी सच्चाई है।


कोई भी उत्पाद/फीचर जिसे आप देख सकते हैं, कल्पना कर सकते हैं या अवधारणा बना सकते हैं, इसकी जटिलता के बावजूद हम इसे बना सकते हैं, एक बार जब हम इसे देख सकते हैं तो FastAPI इसे जीवन में लाने में हमारी मदद कर सकता है।


यहाँ भी प्रकाशित हुआ।