TypeScript में Rate Limiting: लाइब्रेरी, रणनीतियाँ और उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript में Rate Limiting: लाइब्रेरी और इम्प्लीमेंटेशन की पूरी गाइड

Rate Limiting (रिक्वेस्ट स्पीड को सीमित करना) एक ट्रैफिक कंट्रोल मैकेनिज्म है जो सर्वर को ओवरलोड होने से बचाता है, DDoS अटैक से सुरक्षा प्रदान करता है, और संसाधनों का समान वितरण सुनिश्चित करता है। TypeScript में, स्ट्रॉन्ग टाइपिंग और एसिंक्रोनस सपोर्ट के कारण, rate limiting को लागू करना बेहद आसान हो जाता है। इस लेख में हम लोकप्रिय लाइब्रेरी, रणनीतियाँ और TypeScript कोड उदाहरण देखेंगे।

Rate Limiting की आवश्यकता क्यों है?

  • API सुरक्षा — एक क्लाइंट (IP, टोकन या ID के आधार पर) से रिक्वेस्ट की संख्या सीमित करना।
  • दुरुपयोग रोकना — बॉट या स्क्रिप्ट को ब्लॉक करना जो अत्यधिक लोड उत्पन्न करते हैं।
  • संसाधनों का वितरण — यूज़र्स के बीच बैकएंड का उचित उपयोग सुनिश्चित करना।
  • बाहरी सेवाओं की सीमाओं का पालन — तीसरे पक्ष के API (जैसे OpenAI या GitHub) पर रिक्वेस्ट को नियंत्रित करना।

TypeScript के लिए लोकप्रिय Rate Limiting लाइब्रेरी

1. express-rate-limit

Express.js के लिए सबसे लोकप्रिय लाइब्रेरी। यह middleware के रूप में काम करती है और TypeScript को आउट-ऑफ-द-बॉक्स सपोर्ट करती है। आप समय सीमा और कस्टम हैंडलर सेट कर सकते हैं।

इंस्टॉलेशन:

npm install express-rate-limit
npm install -D @types/express-rate-limit

उपयोग का उदाहरण:

import express from 'express';
import rateLimit from 'express-rate-limit';

const app = express();

const limiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15 मिनट
    max: 100, // प्रति विंडो अधिकतम 100 रिक्वेस्ट
    message: 'बहुत अधिक रिक्वेस्ट, कृपया बाद में प्रयास करें।',
    standardHeaders: true,
    legacyHeaders: false,
});

app.use('/api', limiter); // /api/* पर लागू करें

app.get('/api/data', (req, res) => {
    res.json({ message: 'सफल प्रतिक्रिया' });
});

app.listen(3000);

विशेषताएँ:

  • TypeScript के लिए बिल्ट-इन सपोर्ट (Request और Response के लिए टाइप्स)।
  • लचीला कॉन्फ़िगरेशन: की (IP, userId, टोकन) सेट कर सकते हैं।
  • मेमोरी (डिफ़ॉल्ट) या Redis के माध्यम से स्टेट स्टोरेज।

2. bottleneck

क्लाइंट-साइड rate limiting के लिए लाइब्रेरी — बाहरी API पर आउटगोइंग रिक्वेस्ट को नियंत्रित करने के लिए आदर्श। यह क्यू और डिले पर आधारित काम करती है।

इंस्टॉलेशन:

npm install bottleneck

TypeScript के साथ उदाहरण:

import Bottleneck from 'bottleneck';

const limiter = new Bottleneck({
    minTime: 200, // रिक्वेस्ट के बीच न्यूनतम 200 ms
    maxConcurrent: 5, // अधिकतम 5 समवर्ती रिक्वेस्ट
    reservoir: 100, // अवधि के लिए कुल सीमा
    reservoirRefreshAmount: 100,
    reservoirRefreshInterval: 60 * 1000, // हर 60 सेकंड
});

async function fetchData(id: number): Promise<string> {
    const response = await fetch(`https://api.example.com/data/${id}`);
    return response.text();
}

// फंक्शन को लिमिटिंग के साथ रैप करें
const limitedFetch = limiter.wrap(fetchData);

// उपयोग
async function main() {
    const results = await Promise.all([
        limitedFetch(1),
        limitedFetch(2),
        limitedFetch(3),
    ]);
    console.log(results);
}

लाभ:

  • रैप किए गए फंक्शन के लिए टाइप सपोर्ट।
  • लचीली रणनीतियाँ: minTime, maxConcurrent, reservoir।
  • Node.js और ब्राउज़र दोनों में काम करती है।

3. p-limit

समवर्ती एसिंक्रोनस ऑपरेशंस को सीमित करने के लिए हल्की लाइब्रेरी। यह एक साथ चलने वाले प्रॉमिस की संख्या को नियंत्रित करने में मददगार है।

इंस्टॉलेशन:

npm install p-limit

उदाहरण:

import pLimit from 'p-limit';

अनुशंसाएँ