Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

Next.js API रूट्स सुरक्षित करें: Upstash Redis के साथ रेट लिमिटिंग

इस लेख में, हम दिखाएंगे कि 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 क्रेडेंशियल्स को पर्यावरण चर या सीक्रेट स्टोर से रखें और पढ़ें।
  1. सर्वरलेस क्लाउड और Upstash Redis के साथ Next.js ऐप बनाएं - क्विक स्टार्ट गाइड सर्वरलेस क्लाउड और Upstash Redis के साथ Next.js ऐप बनाएं - क्विक स्टार्ट गाइड

    सर्वरलेस क्लाउड Serverless Framework बनाने वाली टीम का एक बैकएंड प्लेटफॉर्म है। यह डेवलपर उत्पादकता को बढ़ावा देने के लिए एक ही प्लेटफॉर्म में क्लाउड रनटाइम, CLI और SDK प्रदान करता है। इस पोस्ट में, हम एक Next.js एप्लिकेशन बनाएंगे जो सर्वरलेस Redis (Upstash) से डेटा पढ़ता है और इसे सर्वरलेस क्लाउड प

  1. Render पर Upstash सर्वरलेस Redis के साथ Next.js डेप्लॉय करना Render पर Upstash सर्वरलेस Redis के साथ Next.js डेप्लॉय करना

    Render एक शक्तिशाली इंफ्रास्ट्रक्चर प्लेटफॉर्म है जो इंस्टेंट डेप्लॉय और ऑटोस्केलिंग प्रदान करता है। आज हम Upstash के साथ एक साधारण Next.js एप्लिकेशन बनाएंगे और फिर इसे Render पर डेप्लॉय करेंगे। नोट: यह ट्यूटोरियल मानता है कि आपने पहले से ही Upstash पर एक Redis इंस्टेंस सेट कर लिया है। यदि आपने ऐसा

  1. पाइपलाइन REST API के साथ सर्वरलेस Redis एक्सेस को बढ़ाएं पाइपलाइन REST API के साथ सर्वरलेस Redis एक्सेस को बढ़ाएं

    Upstash नेटिव Redis API के अलावा REST API का समर्थन करता है। REST API डेवलपर्स को सर्वरलेस और एज फ़ंक्शंस से कनेक्शन समस्याओं के बिना अपने Redis तक पहुंचने में मदद करता है। लेकिन यदि आप एक ही फ़ंक्शन में कई Redis कमांड निष्पादित करते हैं तो इसका मतलब है कि आप डेटाबेस को कई बार कॉल करेंगे। हमारे समुद