কম্পিউটার

Upstash Redis ব্যবহার করে Next.js API রুট সীমিত করা

এই নিবন্ধে, আমরা দেখাব কিভাবে আপস্ট্যাশ রেট লিমিট 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 .

pages/api/hello.js
import {Ratelimit} from "@upstash/ratelimit";
import {Redis} from "@upstash/redis";


const redis = new Redis({
  url: 'UPSTASH_REDIS_REST_URL',
  token: 'UPSTASH_REDIS_REST_TOKEN',
})

// Create a new ratelimiter, that allows 5 requests per 5 seconds
const ratelimit = new Ratelimit({
  redis: redis,
  limiter: Ratelimit.fixedWindow(5, "5 s"),
});

export default async function handler(req, res) {
// Use a constant string to limit all requests with a single ratelimit
// Or use a userID, apiKey or ip address for individual limits.
  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":{}}}

সম্ভাব্য উন্নতি

  • ব্যবহারকারীর প্রতি ব্যবহার সীমিত করতে শনাক্তকারী হিসাবে আপনার ব্যবহারকারীর আইডি বা আইপি ঠিকানা ব্যবহার করুন৷
   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. Next.js-এর সাথে Metamask ব্যবহার করে DApp-এর জন্য পছন্দের স্টোরেজ

  2. সার্ভারলেস ক্লাউড, Next.js এবং Upstash Redis দিয়ে শুরু করুন

  3. সার্ভারলেস রেডিসের সাথে রেন্ডার ব্যবহার করা

  4. সার্ভারলেস রেডিসে পাইপলাইন REST API