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

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

এই নিবন্ধে আমরা নেক্সট.জেএস এপিআই রুট এবং আপস্ট্যাশ রেডিস ব্যবহার করে একটি ন্যূনতম কিন্তু সম্পূর্ণ কার্যকরী প্রমাণীকৃত রেস্ট এপিআই পরিষেবা তৈরি করব, যা আমরা আমাদের ডেটা, আমাদের ব্যবহারকারী প্রমাণীকরণ এবং আমাদের JWT হ্যান্ডলিং উভয়ের জন্য একটি সুপারফাস্ট স্টোরেজ/ক্যাশে সিস্টেম হিসাবে ব্যবহার করব। অনুগ্রহ করে সচেতন হোন যে এই প্রকল্পের কোন ফ্রন্ট এন্ড থাকবে না, তবে এটি শুধুমাত্র এমন API প্রকাশ করবে যা বিভিন্ন ক্লায়েন্টের সাথে জিজ্ঞাসা করা যেতে পারে৷

পূর্বশর্ত

টিউটোরিয়ালটি অনুসরণ করতে আপনার প্রয়োজন হবে:

  • একটি Upstash অ্যাকাউন্ট — এখানে একটি বিনামূল্যের অ্যাকাউন্টের জন্য সাইন আপ করুন
  • রেডিসের প্রাথমিক জ্ঞান
  • Next.js API রুটের প্রাথমিক জ্ঞান
  • প্রমাণিকরণ এবং অনুমোদন কর্মপ্রবাহের প্রাথমিক জ্ঞান
  • HTTP অনুরোধ করার জন্য আপনার পছন্দের একটি টুল

Upstash Redis কি

Upstash হল একটি সার্ভারহীন ইন-মেমরি ক্লাউড ডেটাবেস রেডিসের উপর ভিত্তি করে। আমরা আমাদের API দ্বারা পরিবেশিত ডেটা সংরক্ষণ করতে এটি ব্যবহার করব, আমরা আমাদের ব্যবহারকারী বেস এবং ব্যবহারকারী টোকেনগুলি Upstash Redis-এ সঞ্চয় করব৷

আমরা কি নির্মাণ করব

আমরা একটি REST API পরিষেবা কোড করব যা ক্লায়েন্ট অ্যাপ্লিকেশনগুলিকে এটি থেকে ডেটা অনুরোধ করার অনুমতি দেবে (এই নির্দিষ্ট ক্ষেত্রে চলচ্চিত্রগুলির একটি তালিকা); আমরা JWT ব্যবহার করে শেষ পয়েন্টগুলি সুরক্ষিত করব, টোকেন পেতে আমরা একটি API লগইন পরিষেবা কোড করব এবং আমরা একটি রিফ্রেশ টোকেন ওয়ার্কফ্লোও বাস্তবায়ন করব৷

আমরা ফোকাস করব না ক্লায়েন্ট ডেভেলপমেন্টের উপর (যেহেতু আমরা একটি 'অভিমতহীন' পরিষেবা তৈরি করছি), তবে আমরা আমাদের পরিষেবার স্পেসিফিকেশন সরবরাহ করব যাতে যে কেউ এটির জন্য একটি ক্লায়েন্ট তৈরি করতে পারে।

রিপোজিটরি এবং ডেমো

অনুসরণ করার জন্য আপনি প্রকল্প সংগ্রহস্থল ক্লোন করতে চাইতে পারেন

GitHub

-এ উৎস

এছাড়াও আপনি নিম্নলিখিত URL এ ডেমো চেষ্টা করতে পারেন:

https://upstash-dwov9jbiq-popland.vercel.app/api/auth/signin

পরিষেবার সাথে সংযোগ করতে, একটি POST HTTP অনুরোধ পাসিং ব্যবহারকারীর নাম করুন (me@home.org ) এবং পাসওয়ার্ড (পাসওয়ার্ড ) নিম্নলিখিত উদাহরণের মত (পোস্টম্যান ব্যবহার করে):

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

Redis ডেটাবেস সেট আপ করা

প্রথমত, আপনাকে Upstash Redis-এ সাইন-আপ করতে হবে (একটি বিনামূল্যের প্ল্যান পরীক্ষার উদ্দেশ্যে কাজ করবে), একবার কনসোলে লগ ইন করলে আপনি একটি নতুন ডাটাবেস তৈরি করতে পারবেন:

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

"ডেটাবেস তৈরি করুন" এ ক্লিক করে এগিয়ে যান, এটিকে মুভি ম্যানেজার নাম দিন এবং এটিকে গ্লোবাল হিসাবে সেট করুন৷ আমরা এখন Upstash CLI ব্যবহার করে কিছু ডামি ডেটা যোগ করি

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

আমরা HMSET কমান্ড ব্যবহার করে Redis হ্যাশ (এগুলি মূলত অবজেক্ট) হিসাবে কিছু মুভি যোগ করব:

 hmset movie:’Dr. Strangelove’ director ‘Stanley Kubrick’ year 1964
 hmset movie:’2001: A Space Odyssey’ director ‘Stanley Kubrick’ year 1968
 hmset movie:’Pulp Fiction’ director ‘Quentin Tarantino’ year 1994
 hmset movie:’Django Unchained’ director ‘Quentin Tarantino’ year 2012

আমরা এমন একজন ব্যবহারকারীকেও যুক্ত করব যাকে ডেটা অ্যাক্সেস করার জন্য অনুমোদিত করা হবে, ব্যবহারকারীও একজন Redis হ্যাশ হবেন:

 hmset user:’me@home.org’ password $2b$10$zctxUVDyy3jzvSp68oKpMOnkyra4R.NzOFVh9aii3Y43X7XtetoyK level 0

অনুগ্রহ করে নোট করুন :পাসওয়ার্ডটি bcrypt দিয়ে এনক্রিপ্ট করা হয়েছে (সাধারণভাবে এটি পাসওয়ার্ড ), সাধারণত, যে ব্যবহারকারীদের একটি ওয়েবসাইটের মাধ্যমে API রেজিস্টারে অ্যাক্সেসের প্রয়োজন হয় (অথবা একটি ওয়েবসাইটে তাদের শংসাপত্র সংগ্রহ করুন), এই উদাহরণে আমরা একটি রেজিস্টার এন্ডপয়েন্ট প্রদান করি না

Upstash CLI-তে প্রবেশ করা প্রতিটি কমান্ড আপনাকে একটি ঠিক উত্তর দিতে হবে, যদি সবকিছু সঠিক হয় এবং আপনি ডেটা ব্রাউজারে যান এবং হ্যাশ নির্বাচন করুন, আপনার সন্নিবেশ করা ডেটার তালিকা থাকবে

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

অনুমোদন কার্যপ্রবাহ

যেমন আগে উল্লিখিত হয়েছে, আমাদের শেষ পয়েন্টগুলি সর্বজনীনভাবে অ্যাক্সেসযোগ্য নয়, তাই আমাদের ব্যবহারকারীদের প্রমাণীকরণ এবং অনুমোদন করার একটি উপায় প্রয়োজন৷ প্রমাণীকরণের জন্য আমরা একটি লগইন এন্ডপয়েন্ট প্রদান করি; অনুমোদনের জন্য, সুরক্ষিত এন্ডপয়েন্টের জন্য একটি অনুমোদন শিরোনাম প্রয়োজন, অনুরোধের সাথে পাঠানো হবে। এইভাবে কার্যপ্রবাহ বিস্তারিতভাবে কাজ করে:

  • ব্যবহারকারী সাইন-ইন এন্ডপয়েন্টের অনুরোধ করে, ইউজারনেম এবং পাসওয়ার্ড পোস্ট করে
  • সার্ভারটি ব্যবহারকারীকে প্রমাণীকরণ করার চেষ্টা করে, ব্যবহারকারী বৈধ হলে সার্ভার একটি JWT (JSON ওয়েব টোকেন) এবং একটি রিফ্রেশ টোকেন তৈরি করে ফেরত পাঠায়, রিফ্রেশ টোকেনটি আমাদের Upstash Redis ইনস্ট্যান্সেও সংরক্ষিত থাকে
  • ক্লায়েন্ট টোকেনগুলি ফেরত পায় এবং সেগুলিকে কোথাও সংরক্ষণ করে (এগুলি কীভাবে/কোথায় সংরক্ষণ করা যায় তার দায় ক্লায়েন্টের)
  • ক্লায়েন্ট একটি সুরক্ষিত এন্ডপয়েন্টের অনুরোধ করে, হেডারে JWT পাঠিয়ে
  • সার্ভারটি JWT গ্রহণ করে, এটি যাচাই করে এবং এটি যাচাই করা হলে ক্লায়েন্টের অনুরোধ করা ডেটা ফেরত পাঠায়
  • জেডব্লিউটি-এর মেয়াদ শেষ হয়ে গেলে বা মেয়াদ শেষ হওয়ার কাছাকাছি হলে, ক্লায়েন্ট একটি নির্দিষ্ট এন্ডপয়েন্টে রিফ্রেশ টোকেন পাঠিয়ে পুনরায় লগইন না করে একটি নতুন JWT-এর অনুরোধ করতে পারেন।
  • সার্ভারটি রিফ্রেশ টোকেন গ্রহণ করে, এটি যাচাই করুন এবং যাচাইকরণটি ইতিবাচক হলে একটি নতুন JWT এবং রিফ্রেশ টোকেন ইস্যু করে, সেগুলিকে ক্লায়েন্টের কাছে ফেরত পাঠান এবং আবার নতুন রিফ্রেশ টোকেন সংরক্ষণ করুন

JWT এবং রিফ্রেশ টোকেন একই ফর্ম্যাটে রয়েছে, প্রায় একই তথ্য পেয়েছে কিন্তু দুটি ভিন্ন কী ব্যবহার করবে (আমরা আমাদের .env এ সেট আপ করব ফাইল) এবং দুটি ভিন্ন মেয়াদ শেষ হয়েছে:JWT-এর জন্য একটি সংক্ষিপ্ত (যেহেতু এটি একটি সেশনের সময় সবচেয়ে বেশি ব্যবহৃত টোকেন, তাই আমরা এটিকে শীঘ্রই মেয়াদ শেষ করে দিই, যদি এটি আটকানো হয়) এবং একটি দীর্ঘ রিফ্রেশ টোকেনের জন্য। উভয়ের সময়কাল নির্ভর করে আপনি কতটা নিরাপদে থাকতে হবে তার উপর; সাধারণত, JWT এক ঘন্টারও কম সময়ের মধ্যে শেষ হয়ে যায় এবং রিফ্রেশ টোকেন এক মাস স্থায়ী হতে পারে। যদি উভয় টোকেনের মেয়াদ শেষ হয়ে যায়, ব্যবহারকারীকে আবার লগ ইন করতে হবে।

প্রকল্প সেট আপ করা হচ্ছে

একবার আমরা Upstash Redis ডাটাবেস দিয়ে সম্পন্ন হলে আমরা আমাদের প্রকল্প শুরু করতে পারি; প্রথমে, আমরা একটি নতুন Next.js প্রকল্প তৈরি করি:

 npx create-next-app upstash-jwt

তারপর আমরা নতুন তৈরি ফোল্ডার upstash-jwt এ প্রবেশ করি এবং আমরা প্রয়োজনীয় মডিউল ইনস্টল করি:

 npm i bcrypt jsonwebtoken @upstash/redis

একটি .env.local তৈরি করুন আপনার কীগুলি সংরক্ষণ করতে এবং সঠিক ডেটা দিয়ে পূরণ করতে ফাইল করুন

 SECRET_TOKEN=
 SECRET_RTOKEN=
 UPSTASH_REDIS_REST_URL=
 UPSTASH_REDIS_REST_TOKEN=

SECRET_TOKEN এবং SECRET_RTOKEN তৈরি করুন যেগুলি JWT তৈরি করতে ব্যবহার করা হবে, অনুগ্রহ করে মনে রাখবেন যে এই কীগুলি গোপন রাখা উচিত এবং অনুমান করা খুব এলোমেলো/কঠিন হওয়া উচিত, আপনি একটি 64 বিট টু হেক্স স্ট্রিং ব্যবহার করতে পারেন৷ UPSTASH_REDIS_REST_URL এবং UPSTASH_REST_REstaole থেকে UPSTASH_REDIS_REST_URL পান বিশদ ট্যাব, বাকি API বিভাগ:

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

আমরা এখন আমাদের শেষ পয়েন্টগুলি সাজানো শুরু করতে পারি:

POST/auth/signin এটি ব্যবহারকারীকে লগইন করে, একটি JSON অবজেক্ট {"email":"email", "password": "password"} হিসাবে পাস করা ইমেল এবং পাসওয়ার্ড প্রয়োজন , এটি ব্যবহারকারীর তথ্য একটি JWT এবং একটি রিফ্রেশ টোকেন সহ একটি JSON অবজেক্ট প্রদান করে৷

/চলচ্চিত্র/ পান একটি JSON অবজেক্ট হিসাবে চলচ্চিত্রের তালিকা ফেরত দিন, এটির জন্য একটি বৈধ JWT প্রয়োজন যা এই বিন্যাসের সাথে হেডারে পাস করা হয়েছে:অনুমোদন:বহনকারী xxx

/চলচ্চিত্র/$ID পান $ID

আইডি দিয়ে সিনেমার বিশদ বিবরণ দিন

পোস্ট/প্রমাণ/রিফ্রেশ একটি নতুন JWT তৈরি করুন এবং ফেরত দিন, রিফ্রেশ টোকেনটি refreshToken হিসাবে পাস করা উচিত প্যারামিটার।

এপিআই রুটের জন্য কোড

আমরা সাইন ইন এন্ডপয়েন্ট দিয়ে শুরু করি, আসুন pages/api/auth/signin.js ফাইলটি তৈরি করি অনুসরণ করুন:

import bcrypt from "bcrypt";
 
import {
 addToList,
 generateAccessToken,
 generateRefreshToken,
 redis,
} from "../../../utils";
 
export default async (req, res) => {
 if (req.method === "GET") {
 res.status(405).send("Not Allowed");
 } else {
 console.log(req.body.user);
 try {
 const user = await redis.hgetall(`user:${req.body.user}`);
 if (user) {
 const validPassword = bcrypt.compare(req.body.password, user.password);
 if (validPassword) {
 const token = generateAccessToken(req.body.user, user.level);
 const refreshToken = generateRefreshToken(req.body.user, user.level);
 const refresh = await addToList(req.body.user, refreshToken);
 const content = {
 user: req.body.user,
 level: user.level,
 };
 res.status(200).json({
 message: "Logged in",
 content: content,
 JWT: token,
 refresh: refreshToken,
 });
 } else {
 res.status(400).json({ error: "Invalid Password" });
 }
 } else {
 res.status(401).json({ error: "User not found" });
 }
 } catch (error) {
 res.status(500).send("Internal Server Error");
 }
 }
};

আমাদের সাইন-ইন এন্ডপয়েন্ট শুধুমাত্র দুটি প্যারামিটার সহ POST গ্রহণ করবে:ব্যবহারকারী এবং পাসওয়ার্ড . প্রথমত, আমরা পরীক্ষা করি যে ব্যবহারকারী আমাদের রেডিস ডাটাবেসে এর সাথে উপস্থিত আছে কিনা:

 const user = await redis.hgetall(`user:${req.body.user}`);

ব্যবহারকারী উপস্থিত থাকলে আমরা এনক্রিপ্ট করা পাসওয়ার্ড তুলনা করি:

 const validPassword = bcrypt.compare(req.body.password, user.password);

এই মুহুর্তে, যদি পাসওয়ার্ড মিলে যায়, আমরা ধরে নিতে পারি যে ব্যবহারকারী প্রমাণীকৃত এবং আমরা একটি JWT এবং একটি রিফ্রেশ টোকেন ফেরত পাঠাতে পারি, আমরা আমাদের Redis উদাহরণে রিফ্রেশ টোকেনও সংরক্ষণ করি। এটি করার জন্য আমরা কিছু ফাংশন ব্যবহার করি যা utils.js নামে একটি বাহ্যিক ফাইলে রয়েছে

ফিরে আসা টোকেনগুলি সংরক্ষণ করা, প্রয়োজনে অনুমোদনের জন্য ব্যবহার করা এবং মেয়াদ শেষ হয়ে গেলে রিফ্রেশ করা ক্লায়েন্টের দায়িত্ব৷

আমাদের টোকেন generateAccessToken জেনারেট করার জন্য আমাদের একটি ফাংশন আছে , আমাদের রিফ্রেশ টোকেন generateRefreshToken জেনারেট করতে , এবং আমাদের Redis addToList-এ রিফ্রেশ টোকেন সংরক্ষণ করার জন্য একটি . এই utils.js এই ফাইলটি অন্যান্য সমস্ত ইউটিলিটি ফাংশন এবং রেফারেন্স (যেমন রেডিস সংযোগ, টোকেন যাচাইকরণ এবং রিফ্রেশ ইত্যাদি) রাখতেও ব্যবহার করা হবে:

import { Redis } from "@upstash/redis";
import jwt from "jsonwebtoken";
 
export const redis = new Redis({
 url: process.env.UPSTASH_REDIS_REST_URL,
 token: process.env.UPSTASH_REDIS_REST_TOKEN,
});
export function generateAccessToken(username, email, level) {
 return jwt.sign(
 { user: username, email: email, level: level },
 process.env.SECRET_TOKEN,
 {
 expiresIn: "1h",
 },
 );
}
 
export function generateRefreshToken(username, email, level) {
 return jwt.sign(
 { user: username, email: email, level: level },
 process.env.SECRET_RTOKEN,
 {
 expiresIn: "30d",
 },
 );
}
 
export async function addToList(user, refresher) {
 try {
 await redis.hset("refresh:" + user, { refresh: refresher });
 } catch (error) {
 console.log(error);
 }
}
 
export async function tokenRefresh(refreshtoken, res) {
 var decoded = "";
 try {
 decoded = jwt.verify(refreshtoken, process.env.SECRET_RTOKEN);
 } catch (error) {
 return res.status(401).send("Can't refresh. Invalid Token");
 }
 if (decoded) {
 try {
 const rtoken = await redis.hget("refresh:" + decoded.user, "refresh");
 console.log(rtoken);
 if (rtoken !== refreshtoken) {
 return res.status(401).send("Can't refresh. Invalid Token");
 } else {
 const user = await redis.hgetall(`user:${decoded.user}`);
 console.log(user);
 const token = generateAccessToken(decoded.user, user.level);
 const refreshToken = generateRefreshToken(decoded.user, user.level);
 
 const refresh = await addToList(decoded.user, refreshToken);
 
 const content = {
 user: decoded.user,
 level: user.level,
 };
 return {
 message: "Token Refreshed",
 content: content,
 JWT: token,
 refresh: refreshToken,
 };
 }
 } catch (error) {
 console.log(error);
 }
 }
}
 
export async function verifyToken(token, res) {
 try {
 const decoded = jwt.verify(token, process.env.SECRET_TOKEN);
 return decoded;
 } catch (err) {
 return res.status(405).send("Token is invalid");
 }
}

এখন, (http://localhost:3000/api/auth/signin-এ পোস্ট করে সাইনিং প্রক্রিয়া পরীক্ষা করার জন্য আমরা একটি টুল (যেমন পোস্টম্যান) ব্যবহার করতে পারি। এবং ব্যবহারকারীর নাম পাস করা (me@home.org ) এবং পাসওয়ার্ড (পাসওয়ার্ড ), আপনি একটি JSON অবজেক্ট ফেরত পাবেন যেখানে ব্যবহারকারীর বিবরণ সহ একটি JWT এবং একটি রিফ্রেশ টোকেন রয়েছে:

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

সবকিছু ঠিক থাকলে, আপনার Redis ডাটাবেসে আপনি এখন নতুন তৈরি রিফ্রেশ টোকেনের জন্য একটি নতুন হ্যাশ এন্ট্রি দেখতে পাবেন:

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

এরপরে, আমরা একটি টোকেন রিফ্রেশ রুট refresh.js কোড করে প্রমাণীকরণ প্রক্রিয়াটি সম্পূর্ণ করছি

import { redis, tokenRefresh } from "../../../utils";
 
export default async (req, res) => {
 if (req.method === "GET") {
 res.status(405).send("Not Allowed");
 } else {
 console.log(req.body.refresh);
 const refresp = await tokenRefresh(req.body.refresh, res);
 res.status(200).json(refresp);
 }
};

এটি টোকেনরিফ্রেশ ব্যবহার করে utils.js থেকে ফাংশন এটি টোকেনটি বৈধ এবং ডিকোড করা যেতে পারে তা যাচাই করে শুরু হয়, তারপর এটি Redis-এ চেক করে যে ব্যবহারকারী একটি রিফ্রেশ টোকেন পেয়েছেন কিনা (যেটি আমরা addToList এর সাথে আগে সংরক্ষণ করেছি ), যদি সবকিছু ঠিক থাকে তবে এটি একটি নতুন JWT, একটি নতুন রিফ্রেশ টোকেন তৈরি করে (এবং এটি আবার Redis-এ সঞ্চয় করে) এবং সবকিছু ক্লায়েন্টের কাছে ফেরত পাঠায়।

আমরা http://localhost:3000/api/auth/refresh এ পোস্ট করে আমাদের টুল ব্যবহার করে এই এন্ডপয়েন্টটি পরীক্ষা করতে পারি এবং একটি প্যারামিটার হিসাবে রিফ্রেশ টোকেন পাস করা:

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

এখন, আমাদের অনুমানমূলক ক্লায়েন্ট লগ ইন করতে এবং তার টোকেন রিফ্রেশ করতে সক্ষম, আসুন দেখি কিভাবে টোকেনটি প্রমাণীকৃত অনুরোধ করতে ব্যবহার করা যেতে পারে।

একটি নতুন API রুট তৈরি করুন:api/movies/[[...id]].js যেটি চলচ্চিত্রের তালিকা পেতে এবং একটি চলচ্চিত্রের বিস্তারিত পেতে ব্যবহার করা হবে:

import { redis, verifyToken } from "../../../utils";
 
export default async (req, res) => {
 var id;
 console.log(req.query);
 if (req.query.id) {
 id = req.query.id[0];
 }
 
 var decoded = "";
 const authHeader = req.headers["authorization"];
 const token = authHeader && authHeader.split(" ")[1];
 if (!token) {
 return res.status(403).send("A token is required for authentication");
 } else {
 decoded = await verifyToken(token, res);
 }
 if (decoded) {
 if (id) {
 try {
 const result = await redis.hgetall(id);
 console.log(result);
 return res.status(200).json(result);
 } catch (error) {
 return res.status(500).send("Internal Server Error");
 }
 } else {
 try {
 const result = await redis.scan(0, { match: "movie:*" });
 return res.status(200).json(result);
 } catch (error) {
 return res.status(500).send("Internal Server Error");
 }
 }
 }
};

verifyToken ব্যবহার করে আমাদের utils.js থেকে ফাংশন আমরা আমাদের API এন্ডপয়েন্টে অ্যাক্সেস সীমাবদ্ধ করতে পারি শুধুমাত্র সেই ব্যবহারকারীদের জন্য যারা একটি বৈধ টোকেন প্রদান করে। আমরা কয়েকটি নমুনা প্রশ্ন তৈরি করেছি, প্রথমটি সিনেমার তালিকা পেতে

 const result = await redis.scan(0, { match: ‘movie:*’ });

এবং দ্বিতীয়টি ইউআরএল অনুরোধে আইডি প্যারামের উপর ভিত্তি করে একটি একক চলচ্চিত্রের বিশদ বিবরণ পেতে:

const result = await redis.hgetall(id);

উভয় অনুরোধই ব্যবহারকারীর অবস্থার উপর নির্ভরশীল যা verifyToken এর মাধ্যমে চেক করা হয় কিন্তু আপনি মিশ্রিত এবং মেলাতে পারেন, উদাহরণস্বরূপ, তালিকাটি সর্বজনীন হতে পারে এবং বিশদগুলি সুরক্ষিত করা যেতে পারে। যেহেতু আমাদের কাছে ব্যবহারকারীর (এবং টোকেনে) একটি স্তর সংরক্ষিত আছে তাই আমাদের আরও অনুমোদনের স্তর থাকতে পারে৷ চলুন চলচ্চিত্রগুলির একটি তালিকা পেতে চেষ্টা করি:

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

এবং একটি একক মুভির বিবরণ:

Next.js রুট এবং Upstash Redis ব্যবহার করে একটি নিরাপদ, দ্রুত প্রমাণীকৃত API তৈরি করুন

ক্লায়েন্ট দৃষ্টিকোণ

আমরা আগেই বলেছি, আমরা শুধু সার্ভারের অংশে ফোকাস করেছি, এটি একটি API এর প্রধান সুযোগ, এটি বিমূর্ত হওয়া উচিত, এটি একটি ওয়েবসাইট নয়। ক্লায়েন্ট যেভাবে ডেটার জন্য অনুরোধ করে (প্রোগ্রামিং ভাষা, লাইব্রেরি, এবং আরও) এটি ক্লায়েন্ট বিকাশকারীর পছন্দ, আমরা শেষ পয়েন্টগুলির একটি তালিকা প্রদান করি, আমাদের এন্ডপয়েন্টগুলি কী আশা করছে এবং আমাদের এন্ডপয়েন্টগুলি ক্লায়েন্টের কাছে কী ফিরে আসবে৷ সমস্ত ডেটা হ্যান্ডলিং, রিফ্রেশ বিলম্ব, এবং তাই ক্লায়েন্ট কৌশল।

এরপর কি

এটি একটি সুরক্ষিত API-এর কর্মপ্রবাহের একটি মৌলিক উদাহরণ মাত্র। এখান থেকে এটি শুধুমাত্র উন্নত করা যেতে পারে:Redis-এ ডেটা কীভাবে সংরক্ষণ করা হয় তা অপ্টিমাইজ করা, অন্য Redis উদাহরণে ব্যবহারকারীর ডেটা সংরক্ষণ করে লগইন নিরাপত্তা উন্নত করা, ব্যবহারকারীর পাঠানো ডেটা যাচাই করা এবং যাচাই করা, আরও এন্ডপয়েন্ট যোগ করা, GraphQL ফর্ম্যাটে ডেটা ফেরত দেওয়া, আপনার API-এর জন্য একটি ক্লায়েন্ট তৈরি করা, প্রতি ঘণ্টায় সর্বাধিক সংখ্যক কলের অ্যাক্সেস সীমিত করা, সীমাহীন এক্সেসের মাত্রাগুলিকে উন্নত করা, সীমাহীন অ্যাক্সেস এবং এক্সটেনশন লেভেল ব্যবহার করুন।

  1. জাভাস্ক্রিপ্টে মডিউল কি?

  2. জাভাস্ক্রিপ্টে বন্ধ কি?

  3. বড় ওহ স্বরলিপি (ও)

  4. HTML DOM রিমুভ ইভেন্টলিস্টেনার() পদ্ধতি