इस लेख में, हम दिखाएंगे कि Upstash Rate limit SDK का उपयोग करके अपने Next.js API रूट्स को कैसे रेट लिमिट करें।
डेटाबेस सेटअप
Upstash Console या Upstash CLI का उपयोग करके एक Redis डेटाबेस बनाएं। अगले चरणों के लिए UPSTASH_REDIS_REST_URL और UPSTASH_REDIS_REST_TOKEN कॉपी करें।
प्रोजेक्ट सेटअप
हम एक Next.js एप्लिकेशन बनाएंगे और Vercel पर डिप्लॉय करेंगे।
npx create-next-app@latest
@upstash/ratelimit इंस्टॉल करें:
npm install @upstash/ratelimit @upstash/redis
कोड
अपने pages/api/hello.js को नीचे के रूप में अपडेट करें और UPSTASH_REDIS_REST_URL और UPSTASH_REDIS_REST_TOKEN को बदलें।
import {Ratelimit} from "@upstash/ratelimit";
import {Redis} from "@upstash/redis";
const redis
= new Redis({
url: 'UPSTASH_REDIS_REST_URL',
token: 'UPSTASH_REDIS_REST_TOKEN',
})
// एक नया रेटलिमिटर बनाएं, जो 5 सेकंड में 5 अनुरोधों की अनुमति देता है
const ratelimit
= new Ratelimit({
redis: redis,
limiter: Ratelimit.fixedWindow(5, "5 s"),
});
export
default async
function
handler(req, res)
{
// सभी अनुरोधों को एक ही रेटलिमिट के साथ सीमित करने के लिए एक स्थिर स्ट्रिंग का उपयोग करें
// या प्रति उपयोगकर्ता सीमा के लिए userID, apiKey या ip एड्रेस का उपयोग करें।
const identifier
= "api";
const result
= await ratelimit.limit(identifier);
res.setHeader('X-RateLimit-Limit', result.limit)
res.setHeader('X-RateLimit-Remaining', result.remaining)
if (!result.success)
{
res.status(200).json({message: 'The request has been rate limited.', rateLimitState: result})
return
}
res.status(200).json({name: 'John Doe', rateLimitState: result})
}
यहां, हम 5 सेकंड में 5 अनुरोधों की अनुमति देते हैं।
चलाएं
ऐप को npm run dev के साथ चलाएं। ब्राउज़र को 5 से अधिक बार रीफ्रेश करें और आप रेट लिमिटिंग को एक्शन में देखेंगे।
{"message":"The request has been rate limited.","rateLimitState":{"success":false,"limit":5,"remaining":-1,"reset":1654546770000,"pending":{}}}
संभावित संवर्द्धन
- प्रति उपयोगकर्ता उपयोग सीमित करने के लिए अपने यूजर की आईडी या IP एड्रेस को पहचानकर्ता के रूप में उपयोग करें।
const identifier
= getClientIp(req);
const result
= await ratelimit.limit(identifier);
- स्मूथ (लेकिन अधिक महंगा) रेट लिमिटिंग अनुभव के लिए स्लाइडिंग विंडो एल्गोरिदम का उपयोग करें।
const ratelimit
= new Ratelimit({
redis: redis,
limiter: Ratelimit.slidingWindow(10, "10 s"),
});
- कुछ मात्रा में स्पाइक को सहन करने के लिए टोकन बकेट एल्गोरिदम का उपयोग करें।
const ratelimit
= new Ratelimit({
redis: redis,
limiter: Ratelimit.tokenBucket(5, "10 s", 10),
});
- यदि आपका Next.js एप्लिकेशन विभिन्न क्षेत्रों में डिप्लॉय किया गया है तो विभिन्न क्षेत्रों में कई Redis का उपयोग करें। यह विभिन्न स्थानों के लिए विलंबता को कम करने में मदद करेगा।
- अपने Upstash Redis क्रेडेंशियल्स को पर्यावरण चर या सीक्रेट स्टोर से रखें और पढ़ें।