কম্পিউটার টিউটোরিয়াল

Upstash Redis দিয়ে Next.js API রাউট সুরক্ষিত করুন: রেট লিমিটিং

এই আর্টিকেলে, আমরা দেখাব কিভাবে 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', }) // ৫ সেকেন্ডে ৫ রিকোয়েস্ট অনুমতি দিতে একটি নতুন রেটলিমিটার তৈরি করুন const ratelimit = new Ratelimit({ redis: redis, limiter: Ratelimit.fixedWindow(5, "5 s"), }); export default async function handler(req, res) { // সব রিকোয়েস্টকে একক রেটলিমিট দিয়ে সীমাবদ্ধ করতে একটি কনস্ট্যান্ট স্ট্রিং ব্যবহার করুন // অথবা ব্যক্তিগত লিমিটের জন্য userID, apiKey বা ip address ব্যবহার করুন 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}) }

এখানে, আমরা ৫ সেকেন্ডে ৫ রিকোয়েস্ট অনুমতি দিচ্ছি।

রান করুন

npm run dev দিয়ে অ্যাপটি চালান। ব্রাউজারটি ৫ বারથી বেশি রিফ্রেশ করুন এবং আপনি রেট লিমিটিং একশনে দেখতে পাবেন।

{"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. Web3 অ্যাপে ব্যবহারকারীর পছন্দ সংরক্ষণ: Metamask-চালিত Next.js সমাধান

  2. Serverless Cloud এবং Upstash Redis দিয়ে Next.js অ্যাপ তৈরি করুন – কুইক স্টার্ট গাইড

  3. Render-এ Upstash Serverless Redis দিয়ে Next.js ডিপ্লয় করুন

  4. Pipeline REST API দিয়ে সার্ভারলেস Redis এক্সেস বাড়ান