Full transcript
0:00এই ভিডিওতে
0:01আমরা তিনটি
0:02বিষয় নিয়ে
0:02আলোচনা করব :
0:03হ্যান্ডলার ,
0:04সার্ভিস ,
0:05রিপোজিটরি
0:06প্যাটার্ন ,
0:06মিডল এবং
0:07রিকোয়েস্ট
0:08কনটেক্সট ।
0:09প্রাথমিকভাবে
0:10পরিকল্পনা ছিল
0:11প্রতিটি বিষয়
0:12আলাদা আলাদা
0:13ভিডিওতে
0:13আলোচনা করার ।
0:14তাই এটি তিনটি
0:15ভিডিওর একটি
0:16সিরিজ হওয়ার
0:17কথা ছিল , কিন্তু
0:18যেহেতু এই
0:19তিনটি বিষয়
0:19একে অপরের সাথে
0:20খুব
0:21ঘনিষ্ঠভাবে
0:21সম্পর্কিত —
0:22আসলে , যেহেতু
0:23আমরা এখানে
0:24ব্যাকএন্ড
0:24নিয়ে কথা বলছি ,
0:25তাই প্রায় সব
0:26বিষয়ই একে
0:27অপরের সাথে
0:28ঘনিষ্ঠভাবে
0:29সম্পর্কিত —
0:29কিন্তু আমি তো
0:30আর ১০০ ঘণ্টার
0:31একটি ভিডিও
0:32বানাতে পারি না ,
0:33তাই না ? সুতরাং ,
0:34এই ক্ষেত্রে , এই
0:35বিষয়গুলো একে
0:36অপরের সাথে খুব
0:36ঘনিষ্ঠভাবে
0:37সম্পর্কিত এবং
0:38বিভিন্ন
0:39ভিডিওতে একই
0:39জিনিস বারবার
0:40পুনরাবৃত্তি
0:41না করে একই
0:41প্রসঙ্গে এই
0:42তিনটি বিষয়
0:43ব্যাখ্যা করা
0:44সহজ হবে । আর
0:49একারণেই আমরা
0:50এই একই ভিডিওতে
0:51তিনটি বিষয়ই
0:52আলোচনা করতে
0:53যাচ্ছি । এখন
0:54হ্যান্ডলার ,
0:55সার্ভিস এবং
0:56রিপোজিটরি
0:56নিয়ে কথা বলা
0:57যাক । আমি জানি
0:58যে আমি এই
0:59বিষয়টি নিয়ে
1:00বিভিন্ন
1:00ভিডিওতে কথা
1:01বলেছি । আমি এটি
1:03উল্লেখ করেছি ,
1:04এমনকি
1:04অন্যান্য
1:05ভিডিওতে এটি
1:05কিছুটা
1:06ব্যাখ্যাও
1:07করেছি । তাই এটি
1:08কিছুটা
1:08পুনরাবৃত্তিমূলক
1:09শোনাতে পারে ,
1:10কিন্তু আমি
1:11আনুষ্ঠানিকভাবে
1:12এই বিষয়টি
1:12কখনও আলোচনা
1:13করিনি । সুতরাং ,
1:14এটাই সেই সময়
1:15যখন আমরা তা
1:16করতে পারি । ঠিক
1:18আছে । তাহলে
1:19চলুন
1:19ক্লায়েন্ট
1:20এবং সার্ভার
1:21দিয়ে শুরু করা
1:21যাক । এখানে
1:24আমাদের
1:24ক্লায়েন্ট
1:25আছে এবং ধরা যাক
1:26এখানে সার্ভার
1:27আছে । ঠিক আছে ।
1:29এটি আমাদের
1:30ক্লায়েন্ট -
1:31সার্ভার এবং
1:31আমরা HTTP - এর
1:32মাধ্যমে একে
1:33অপরের সাথে
1:33যোগাযোগ করি ।
1:35এখন , যখন একটি
1:36ক্লায়েন্ট
1:37একটি অনুরোধ
1:38পাঠায় , তখন
1:38সেটি আমাদের
1:39সার্ভারে
1:40পৌঁছায় ।
1:41সুতরাং ,
1:42অনুরোধটি
1:42আমাদের
1:43সার্ভারে
1:44পৌঁছানোর
1:44মুহূর্ত থেকে
1:45শুরু করে
1:46প্রতিক্রিয়া
1:47পাওয়ার
1:47মুহূর্ত
1:48পর্যন্ত
1:48সার্ভারের
1:49ভেতরে অনেক
1:50কিছু ঘটতে থাকে
1:51এবং আমরা একে
1:52অনুরোধের
1:53জীবনচক্র ( request life
1:54cycle ) বলি । আমরা
1:56ইতোমধ্যেই
1:57সার্ভারের
1:57বাইরের
1:58অনুরোধের
1:58জীবনচক্র
1:59নিয়ে কথা
1:59বলেছি , যেমন
2:00অনুরোধ পাঠানো
2:01এবং
2:01প্রতিক্রিয়া
2:02পাঠানোর সময়
2:03এই পর্যায়ে কী
2:04ঘটে , কিন্তু
2:05আমরা
2:05সার্ভারের
2:06ভেতরের
2:06অনুরোধের
2:07জীবনচক্র
2:07নিয়ে আলোচনা
2:08করিনি ।
2:09অনুরোধের
2:09জীবনচক্র
2:10জুড়ে
2:10সার্ভারের
2:11ভেতরে কী ঘটে ।
2:13তাহলে চলুন
2:13সেটি আলোচনা
2:14করা যাক : এখন কী
2:16ঘটছে ? অনুরোধটি
2:18এখানে পৌঁছায় ,
2:19এবং এটি আমাদের
2:20সার্ভারের
2:21এন্ট্রি
2:21পয়েন্ট ।
2:24এন্ট্রি হলো
2:25সেই মুহূর্ত ,
2:26যখন আমাদের
2:27অপারেটিং
2:27সিস্টেম একটি
2:28নির্দিষ্ট HTTP
2:29অনুরোধকে একটি
2:30নির্দিষ্ট
2:31পোর্টে ( সেটি
2:32৩,০০০ বা ৪,০০০
2:33হতে পারে , আপনার
2:34সার্ভারে
2:35চলমান যেকোনো
2:36পোর্ট )
2:36ফরোয়ার্ড করে
2:37। আপনার
2:38অপারেটিং
2:38সিস্টেম সেই
2:39অনুরোধটি
2:39আপনার
2:40সার্ভারে
2:40পাঠিয়ে দেয়
2:41এবং অনুরোধটি
2:42আপনার
2:42সার্ভারে
2:42পৌঁছায় । এটাই
2:43আপনার
2:44অনুরোধের
2:44এন্ট্রি
2:45পয়েন্ট । এখন
2:45কী ঘটে ? আপনার
2:47সার্ভারকে
2:47অবশ্যই কোনো
2:48একটি
2:48নির্দিষ্ট
2:49পোর্টে লিসেন (
2:50listen ) করতে হয়
2:51এবং এভাবেই এটি
2:52অনুরোধটি পায়
2:52। অনুরোধের
2:54শুরুতে কী ঘটে ?
2:55আমাদের রাউটিং (
2:56routing ) আছে ।
2:57অনুরোধটি
2:57আমাদের
2:58সার্ভারের
2:58এন্ট্রি
2:58পয়েন্টে
2:59পৌঁছানোর পর ,
2:59আমাদের রাউটিং
3:00ব্যবস্থা
3:00রয়েছে ।
3:01আমাদের
3:01বিভিন্ন ধরনের
3:02রুট ( rout ) আছে ।
3:03উদাহরণস্বরূপ ,
3:05users - এর জন্য users / 123
3:07আছে । আমাদের
3:08ডাইনামিক রুট (
3:08dynamic routes ) ইত্যাদি
3:09ইত্যাদি
3:10রয়েছে । আমরা
3:11ইতোমধ্যেই
3:11রাউটিং এবং এই
3:12সব নিয়ে কথা
3:12বলেছি । এটি
3:13আমাদের রাউটিং
3:14অ্যালগরিদমে
3:15পৌঁছায় এবং
3:16রাউটিং
3:16অ্যালগরিদমের
3:17উপর নির্ভর করে ,
3:18আমরা সেই
3:19অনুরোধটিকে
3:19একটি
3:20নির্দিষ্ট
3:20হ্যান্ডলারের
3:21সাথে ম্যাপ ( map )
3:22করি ।
3:23হ্যান্ডলার
3:24হলো মূলত
3:25আমাদের আগে
3:26থেকে
3:26সংজ্ঞায়িত (
3:27predefined ) যেকোনো
3:28ফাংশন , যা সেই API -
3:29এর অনুরোধটি
3:30পরিচালনা করার
3:31জন্য তৈরি ।
3:33আমরা এই রুটের
3:34জন্য
3:35হ্যান্ডলার
3:35হিসেবে কোনো
3:36একটি ফাংশন
3:37ম্যাপ করেছি ।
3:40এখন আমাদের
3:40কাছে
3:41হ্যান্ডলার বা
3:42কন্ট্রোলার ,
3:42সার্ভিস এবং
3:43রিপোজিটরি - র
3:44ধারণা আছে । আর
3:46কেন আমাদের
3:46তিনটি আলাদা
3:47কম্পোনেন্ট
3:48আছে ? কেন আমরা
3:50শুধু একটি
3:51হ্যান্ডলার
3:51রাখি না যা
3:52সমস্ত কাজ করে ?
3:53এবং আসল কথা হলো
3:54, আমরা তা
3:55রাখতেই পারি ।
3:57দায়িত্বগুলোকে
3:58তিনটি ভিন্ন
3:59কম্পোনেন্টে
4:00ভাগ করে
4:00দেওয়ার কোনো
4:01বাধ্যবাধকতা
4:02নেই । এর কোনো
4:03কঠোর
4:03বাধ্যবাধকতা
4:04নেই । এটি কেবল
4:05একটি ডিজাইন
4:06প্যাটার্ন ,
4:07যাতে আপনার
4:08কোডবেস
4:08স্কেলেবল হয় ,
4:09আরও সহজে
4:10রক্ষণাবেক্ষণযোগ্য
4:11হয় , ফিচার যোগ
4:12করা সহজ হয় এবং
4:14ডিবাগ করাও সহজ
4:15হয় । এখন চলুন
4:17দেখি এই তিনটি
4:18কম্পোনেন্টের
4:18দায়িত্ব কী ।
4:20প্রথম স্তরে ,
4:21আমরা যখন এখানে
4:22রিকোয়েস্ট
4:23পাই , রাউটিং
4:23অ্যালগরিদম
4:24থেকে এটি
4:25হ্যান্ডলার বা
4:26কন্ট্রোলারে
4:26পৌঁছায় ।
4:27সুতরাং , এখানে
4:28আমাদের
4:29হ্যান্ডলার /
4:30কন্ট্রোলার
4:30আছে । আচ্ছা ।
4:32এটির দায়িত্ব
4:33কী ? আমরা
4:34রিকোয়েস্টটি
4:35পাই , এবং প্রায়
4:36সব সার্ভারেই ,
4:37আপনি Golang , NodeJS বা
4:38Python নিয়ে কাজ
4:38করছেন কিনা তা
4:39বিবেচ্য নয় —
4:40এই তিনটি ভাষাই
4:41আমি
4:41ব্যক্তিগতভাবে
4:42ব্যবহার করেছি ,
4:43তাই অন্যান্য
4:44ভাষায় এই
4:45প্যাটার্নটি
4:46কীভাবে কাজ করে
4:47সে সম্পর্কে
4:48আমি অবগত নই ,
4:48তবে আমি বেশ
4:49নিশ্চিত যে এটি
4:50একটি
4:51প্রতিষ্ঠিত
4:51প্যাটার্ন , তাই
4:52না ? প্রতিটি
4:54হ্যান্ডলারে
4:54আপনি অন্তত
4:55দুটি অবজেক্ট
4:56বা দুটি
4:56ভেরিয়েবল
4:57পাবেন । আপনি
4:58কোন
4:58প্রোগ্রামিং
4:59ল্যাঙ্গুয়েজ
5:00ব্যবহার করছেন
5:01তার উপর নির্ভর
5:02করে , আপনি দুটি
5:03অবজেক্ট বা
5:03দুটি
5:04ভেরিয়েবল
5:04পাবেন । একটি
5:07হলো
5:07রিকোয়েস্ট
5:08অবজেক্ট ,
5:08অন্যটি হলো
5:09রেসপন্স
5:09অবজেক্ট ।
5:13হ্যান্ডলারটি
5:14রিকোয়েস্ট
5:14অবজেক্ট থেকে HTTP
5:15রিকোয়েস্টের
5:16ভ্যালু নিতে
5:17পারে এবং
5:17রেসপন্স
5:18অবজেক্ট
5:18ব্যবহার করে
5:19রেসপন্স
5:19পাঠাতে ও
5:20রেসপন্স হেডার
5:21ইত্যাদি
5:21পরিবর্তন করতে
5:22পারে । এই
5:25কারণেই আমরা এই
5:26দুটি অবজেক্ট
5:27পাই এবং আমাদের
5:28নিজেদের থেকে
5:29এগুলো যোগ করার
5:30প্রয়োজন হয়
5:31না । আপনি যে
5:33রানটাইম বা
5:33প্রোগ্রামিং
5:34ল্যাঙ্গুয়েজ
5:34ব্যবহার করছেন ,
5:35তার উপর এটি
5:36নির্ভর করে ।
5:37আপনি যদি Go
5:38ব্যবহার করেন ,
5:39তবে Go আপনার
5:39হ্যান্ডলার
5:40প্যারামিটারে
5:41ডিফল্টভাবে এই
5:42দুটি অবজেক্ট
5:43সরবরাহ করে ।
5:44একইভাবে , Node.js - এর
5:45ক্ষেত্রেও ,
5:46আপনি যদি Express বা
5:47এই জাতীয় কিছু
5:48ব্যবহার করেন ,
5:48তবে আপনাকে এই
5:49রিকোয়েস্ট
5:50এবং রেসপন্স
5:51সরবরাহ করা হবে
5:52। আপনাকে এগুলো
5:52যোগ করতে হবে না
5:53, আপনি প্রতিটি
5:54রিকোয়েস্টের
5:55জন্য এগুলো
5:55পাবেন । এখন
5:56হ্যান্ডলারের
5:57এন্ট্রি
5:57পয়েন্টে কী
5:58ঘটে ? আপনার মনে
5:59প্রথম যে
6:00বিষয়টি আসে তা
6:01হলো , আমাদের
6:01খুঁজে বের করতে
6:02হবে যে
6:03রিকোয়েস্টটি
6:03কীসের জন্য ?
6:05আমরা
6:05ইতিমধ্যেই
6:06জানি যে এই API -
6:06টির কাজ কী ,
6:07কারণ এই API - টিকে
6:08উপরের একটি
6:09নির্দিষ্ট
6:09রুটে রাউট করা
6:10হয়েছিল এবং
6:11আমরা এটি এই
6:12নির্দিষ্ট
6:13হ্যান্ডেলে
6:13পেয়েছি ।
6:15সুতরাং আমরা
6:16জানি যে এই
6:16ক্লায়েন্টটি
6:17কোন নির্দিষ্ট
6:18API - কে কল করার
6:19চেষ্টা করছে ,
6:20তথ্যের সেই
6:20অংশটি আমাদের
6:21কাছে
6:21ইতিমধ্যেই আছে
6:22। এখন আমরা
6:24বিভিন্ন
6:24ভ্যালু বের
6:25করতে চাই যাতে
6:26আমরা
6:26রিকোয়েস্টটি
6:27প্রসেস করতে
6:27পারি এবং সেই
6:28অনুযায়ী একটি
6:29রেসপন্স
6:29পাঠাতে পারি ।
6:30আমরা বিভিন্ন
6:31ডাটাবেস
6:31অপারেশন করতে
6:32পারি । আমরা
6:33এক্সটার্নাল
6:33লজিক ব্যবহার
6:34করতে পারি ।
6:35আমরা
6:35এক্সটার্নাল API
6:36কল করতে পারি ।
6:37আমরা ইমেল
6:37পাঠাতে পারি ।
6:38আমরা
6:39নোটিফিকেশন
6:39পাঠাতে পারি ।
6:40আমাদের
6:41প্রসেসিং
6:41লজিকের ভেতরে
6:42আমরা অনেক
6:43কিছুই করতে
6:43পারি । এবং
6:44রিকোয়েস্টটি
6:45কী ধরনের তার
6:46উপর নির্ভর করে
6:47আমাদের
6:47রেসপন্স
6:48পাঠাতে হবে বা
6:49পাঠাতে হবে না ।
6:51যদি এটি একটি
6:52ডিলিট
6:52রিকোয়েস্ট
6:53হয় , তাহলে
6:54রেস্টফুল
6:54স্ট্যান্ডার্ড
6:55অনুযায়ী
6:56আপনাকে একটি
6:57খালি রেসপন্স
6:58বডির সাথে 204 নো -
6:58কন্টেন্ট
6:59রেসপন্স কোড
7:00পাঠাতে হবে এবং
7:01তার উপর নির্ভর
7:02করে আমরা কী
7:02রেসপন্স দেব তা
7:03ঠিক করতে পারি ।
7:07এখন এন্ট্রি
7:07পয়েন্টে ,
7:08আপনার মনে
7:09প্রথম যে
7:09জিনিসটি আসে তা
7:10হলো , আপনাকে এই
7:11রিকোয়েস্ট
7:12অবজেক্ট থেকে
7:13ডেটা বের করতে
7:13হবে , যা একটি
7:14কন্ট্রোলারের
7:15হ্যান্ডলারের
7:16প্রথম
7:16দায়িত্ব ।
7:18সুতরাং , এই
7:19বিষয়টি
7:19আপনাকে মনে
7:20রাখতে হবে ।
7:21আবারও বলছি , এটি
7:22কোনো আবশ্যিক
7:23শর্ত নয় । আপনি
7:24আপনার
7:24হ্যান্ডলার /
7:25কন্ট্রোলারের
7:25মধ্যেই সবকিছু
7:26করতে পারেন ।
7:27কিন্তু একটি
7:27সাধারণ
7:28ব্যাকএন্ড
7:28আর্কিটেকচারে ,
7:29এটিকে আরও বেশি
7:30স্কেলেবল করার
7:30জন্য আমরা
7:31এভাবেই এর গঠন
7:32তৈরি করি । এখন ,
7:32আপনার
7:33কন্ট্রোলার বা
7:33হ্যান্ডলারের
7:34প্রথম এন্ট্রি
7:35পয়েন্ট
7:35হিসেবে , আপনার
7:36দায়িত্ব হলো
7:37রিকোয়েস্ট
7:37অবজেক্ট থেকে
7:38ডেটা বের করে
7:39আনা ।
7:39রিকোয়েস্টটি
7:40কী ধরনের তার
7:41উপর নির্ভর করে ,
7:41যদি এটি একটি
7:42গেট ( GET )
7:43রিকোয়েস্ট
7:43হয় , তাহলে
7:44আপনাকে
7:44কোয়েরি
7:45প্যারামস ( Query Params )
7:46বের করে আনতে
7:46হবে , তাই না ? যদি
7:47এটি একটি পোস্ট
7:48( Post ) রিকোয়েস্ট
7:49হয় , তাহলে
7:49আপনাকে
7:50রিকোয়েস্ট
7:50বডি ( Request Body ) বের
7:51করে আনতে হবে ।
7:52একইভাবে , ডিলিট
7:52( delete ) - এর জন্য
7:53আমরা
7:53রিকোয়েস্ট
7:54বডি বের করে
7:55আনতে পারি । এবং
7:56পুট ( put ) বা প্যাচ
7:57( patch ) - এর জন্যও
7:58আমরা
7:58রিকোয়েস্ট
7:59বডি বের করে
8:00আনতে পারি ।
8:00রিকোয়েস্টটি
8:01কী ধরনের তার
8:02উপর নির্ভর করে
8:02আমরা
8:03রিকোয়েস্ট
8:03বডি বের করে
8:04আনতে পারি ।
8:04এটাই একটি
8:05হ্যান্ডলার বা
8:05কন্ট্রোলারের
8:06প্রথম
8:06দায়িত্ব । এখন ,
8:07আমরা
8:07ইতোমধ্যেই
8:08সিরিয়ালাইজেশন
8:09( serialization ) এবং
8:09ডিসিরিয়ালাইজেশন
8:10( deserialization ) নিয়ে
8:11কথা বলেছি । এবং
8:12আমরা এই ক্রমটি
8:13অনুসরণ করার
8:13একটি কারণ আছে ।
8:15আমরা
8:16রিকোয়েস্টের
8:17প্রবাহকে উপর
8:17থেকে নিচে
8:18অনুসরণ করার
8:19চেষ্টা করছি ,
8:20তাই না ?
8:22অনুরোধটি
8:22ক্লায়েন্টের
8:23কাছ থেকে শুরু
8:24হয়েছিল , এবং
8:25সেই কারণেই
8:26আমরা প্রথমে HTTP
8:27লাইফ সাইকেল
8:28কীভাবে কাজ করে
8:29তা আলোচনা
8:29করেছি , তাই না ?
8:30তারপর আমরা
8:32রাউটিং ,
8:33সিরিয়ালাইজেশন
8:34এবং
8:34ডিসিরিয়ালাইজেশন
8:35, তারপর
8:36ভ্যালিডেশন
8:36এবং
8:37ট্রান্সফরমেশন
8:38ইত্যাদি নিয়ে
8:38আলোচনা করেছি ,
8:39তাই না ? আমরা
8:40অনুরোধটিকে
8:41একেবারে শুরু
8:42থেকে অনুসরণ
8:43করছি যতক্ষণ না
8:43এটি আমাদের
8:44রিপোজিটরি বা
8:45ডাটাবেস
8:45লেয়ারে
8:46পৌঁছায় । ঠিক
8:48আছে , আমরা
8:49ইতিমধ্যেই
8:49জানি যে এই
8:50পর্যায়ে
8:51আমাদের কোনো না
8:51কোনো ধরনের
8:52সিরিয়ালাইজেশন
8:53এবং
8:53ডিসিরিয়ালাইজেশন
8:55করতে হবে , কারণ
8:55ক্লায়েন্ট
8:56একটি অনুরোধ
8:57পাঠায় এবং সেই
8:58অনুরোধটি JSON
8:59ফরম্যাটে
8:59সিরিয়ালাইজ
9:00করা হয় , যেহেতু
9:01এটিকে
9:01ইন্টারনেটের
9:02মাধ্যমে ভ্রমণ
9:03করতে হয় । JSON
9:05একটি
9:05সিরিয়ালাইজেবল
9:06ফরম্যাট যা
9:07ফ্রন্ট - এন্ড
9:08এবং ব্যাক -
9:08এন্ডের সীমানা
9:09জুড়ে ব্যবহৃত
9:10হয় , এবং
9:11অন্যান্য
9:11সিরিয়ালাইজেশন
9:12ফরম্যাটও
9:13রয়েছে , কিন্তু
9:14JSON এখন পর্যন্ত
9:15সবচেয়ে
9:15জনপ্রিয় । ঠিক
9:17আছে । এখন
9:18কন্ট্রোলার
9:18লেয়ারে
9:19আমাদের প্রথম
9:20যে কাজটি করতে
9:20হবে তা হলো ,
9:21আপনার
9:21প্রোগ্রামিং
9:22ভাষার উপর
9:23নির্ভর করে
9:23ইমপ্লিমেন্টেশনগুলো
9:24ভিন্ন হতে পারে ,
9:25কিন্তু এটি
9:26একটি সাধারণ
9:27প্যাটার্ন ।
9:29আপনাকে প্রথমে
9:30যা করতে হবে তা
9:31হলো , অনুরোধ
9:31থেকে প্রাপ্ত JSON
9:32অবজেক্টটিকে
9:33আপনার নেটিভ
9:34ডেটা ফরম্যাটে
9:35ডিসিরিয়ালাইজ
9:36করা । এখন যদি
9:38এটি একটি NodeJS
9:39ব্যাক এন্ড হয় ,
9:40তাহলে আপনাকে
9:41এই ধাপটি করতে
9:42হবে এমন কোনো
9:43বাধ্যবাধকতা
9:44নেই । রাউটিং
9:45হওয়ার আগে ,
9:46আপস্ট্রিমের
9:47কোথাও একটি
9:47মিডলওয়্যার
9:48থাকবে , যা সমস্ত
9:49JSON - কে
9:49জাভাস্ক্রিপ্ট
9:50অবজেক্টে
9:51সিরিয়ালাইজ
9:52করে , তাই না ? এই
9:53কারণেই আমাদের
9:54NodeJS
9:54অ্যাপগুলোতে
9:55মাঝখানে JSON ডট
9:56বডি পার্সার
9:57ইত্যাদি থাকে ।
9:58সুতরাং , এই
9:59কারণেই আমরা
10:00হ্যান্ডলার
10:00লেয়ারে এই
10:01ধাপটি
10:02আবশ্যিকভাবে
10:02করি না । কিন্তু
10:04Go বা Python - এর মতো
10:05অন্যান্য
10:06প্রোগ্রামিং
10:06ল্যাঙ্গুয়েজে
10:07, আমাদের এই
10:08ধাপটি
10:08স্পষ্টভাবে
10:09করতে হয় ;
10:10রিকোয়েস্টে
10:10প্রাপ্ত
10:11যেকোনো JSON - কে
10:12আমাদের নেটিভ
10:12ফরম্যাটে ডি -
10:13সিরিয়ালাইজ
10:14করতে হয় । তাই
10:16যদি এটি একটি Go
10:17অ্যাপ হয় ,
10:18আমাদের এটিকে
10:19একটি নেটিভ strct - এ
10:20ডি -
10:20সিরিয়ালাইজ
10:21করতে হবে । যদি
10:22এটি একটি Python
10:23অ্যাপ হয় ,
10:23আমাদের এটিকে
10:24একটি ডিকশনারি
10:25বা ক্লাসে ডি -
10:26সিরিয়ালাইজ
10:26করতে হবে । এবং
10:27একইভাবে Rust - এর
10:28জন্য , আমরা একটি
10:30strct ইত্যাদিতে
10:31ডি -
10:31সিরিয়ালাইজ
10:32করতে পারি । তাই
10:33না ? আমাদের JSON
10:34ডেটা নিয়ে
10:35সেটিকে এমন
10:36একটি ফরম্যাটে
10:37রূপান্তর করতে
10:38হয় যা আমাদের
10:38প্রোগ্রামিং
10:39ল্যাঙ্গুয়েজ
10:40বুঝতে পারে এবং
10:41যা তার নেটিভ
10:42ডেটা ফরম্যাট
10:43অনুসরণ করে ।
10:45হ্যান্ডলারের
10:46এটাই প্রথম কাজ
10:46। এটি
10:48রিকোয়েস্ট
10:49অবজেক্ট থেকে
10:50ডেটা বের করে
10:50নেয় এবং আপনার
10:51ব্যবহৃত
10:52প্রোগ্রামিং
10:52ল্যাঙ্গুয়েজের
10:53নেটিভ
10:53ফরম্যাটে
10:54ডিসিরিয়ালাইজ
10:55করে । এটাই
10:57প্রথম ধাপ । ঠিক
10:59আছে । আপনি কোন
11:01ফ্রেমওয়ার্ক
11:02ব্যবহার করছেন
11:03তার উপর নির্ভর
11:03করে একে
11:04বাইন্ডিংও বলা
11:05হয় , কিন্তু
11:05বেশিরভাগ
11:06ফ্রেমওয়ার্ক
11:07এই পরিভাষাটি
11:08ব্যবহার করে ,
11:08যাকে বলা হয়
11:09রিকোয়েস্ট
11:10বডিকে আপনার
11:11নেটিভ
11:11ফরম্যাটে
11:12বাইন্ডিং করা ।
11:15এবং এই ধাপে ,
11:16যদি
11:16ডিসিরিয়ালাইজেশন
11:17ব্যর্থ হয় বা
11:18কোনো ত্রুটি
11:19ঘটে , তাহলে আমরা
11:20ক্লায়েন্টের
11:21কাছে 400
11:22স্ট্যাটাস কোড
11:23সহ একটি
11:23রিকোয়েস্ট
11:24রেসপন্স পাঠাই ,
11:25যা বলে ' ব্যাড
11:26রিকোয়েস্ট ' ।
11:31ক্লায়েন্টকে
11:32এটা জানানোর
11:32জন্য আমরা 400 এরর
11:33কোড ব্যবহার
11:34করি যে এই
11:35রিকোয়েস্টটি
11:36বৈধ নয় । এই
11:38রিকোয়েস্ট
11:38পেলোডে কিছু
11:39একটা সমস্যা
11:40আছে । তাই না ?
11:41আমরা 400
11:41রিকোয়েস্টটি
11:42পাঠাই এবং এই
11:43পর্যায়ে
11:43রিকোয়েস্টটি
11:44টার্মিনেট করে
11:45দিই । আমরা আর
11:46চালিয়ে যাই না
11:46। আমরা আর সামনে
11:48এগোই না । তাই না
11:49? প্রথম বিষয় ।
11:50এখন , দ্বিতীয়
11:51বিষয় এবং
11:51আবারও বলছি , আমি
11:52এখন একটি আদর্শ
11:53প্রোডাকশন
11:54গ্রেড
11:55ব্যাকএন্ড
11:55প্যাটার্ন
11:56নিয়ে কথা বলছি
11:57। ঠিক আছে ।
11:58ইমপ্লিমেন্টেশনের
11:59উপর নির্ভর করে ,
12:00আপনার একটি
12:00ভ্যালিডেশন
12:01লেয়ার নাও
12:01থাকতে পারে ।
12:02কিন্তু আমরা
12:03আগের একটি
12:03ভিডিওতে
12:04ভ্যালিডেশন
12:04এবং
12:05ট্রান্সফরমেশন
12:05নিয়ে
12:06ইতিমধ্যেই কথা
12:06বলেছি । এবং
12:07পরামর্শটি হলো ,
12:08আপনার
12:09সার্ভারে
12:09বাইরের কোনো
12:10উৎস থেকে যা
12:11কিছু আসছে , তার
12:12সবকিছুই
12:13ভ্যালিডেট করা
12:14উচিত । আপনার
12:16পাথ
12:16প্যারামিটার
12:17থেকে শুরু করে
12:18রিকোয়েস্ট
12:19বডি ,
12:19রিকোয়েস্ট
12:20কোয়েরি
12:20প্যারামিটার
12:21ইত্যাদি
12:21সবকিছুই , যা
12:22কিছু আপনি
12:23ভ্যালিডেট
12:23করতে পারেন , এবং
12:24ভ্যালিডেট
12:25করার সময় যতটা
12:26সম্ভব
12:26সুনির্দিষ্ট
12:27হন । আমরা
12:29আমাদের
12:29ভ্যালিডেশন
12:30ট্রান্সফরমেশন
12:31ভিডিওতে এই
12:31বিষয়গুলো
12:32ইতিমধ্যেই
12:32আলোচনা করেছি ।
12:33এখন , এখানে
12:34দ্বিতীয় যে
12:35কাজটি হয় তা
12:35হলো , একবার আমরা
12:36ডেটাটিকে একটি
12:37নেটিভ
12:37ফরম্যাটে
12:38ডিসিরিয়ালাইজ
12:39করে ফেললে , তখন
12:40আমরা ডেটাটি
12:40বুঝতে পারি ।
12:41আমাদের
12:42প্রোগ্রামিং
12:42ল্যাঙ্গুয়েজ
12:43ডেটাটির অর্থ
12:44বুঝতে পারে ।
12:44এটি JSON ডেটার
12:45অর্থ বুঝতে
12:46পারে না , কারণ
12:46এটি একটি
12:47সিরিয়ালাইজেবল
12:48ফরম্যাট এবং সব
12:49প্রোগ্রামিং
12:49ল্যাঙ্গুয়েজে
12:50এটি সাপোর্ট
12:51করে না ।
12:51জাভাস্ক্রিপ্টে
12:52JSON - এর জন্য খুব
12:53ভালো সাপোর্ট
12:54আছে , কারণ JSON
12:55জাভাস্ক্রিপ্ট
12:56অবজেক্ট
12:56দ্বারা
12:57অনুপ্রাণিত
12:57এবং এতে JSON - এর
12:58জন্য
12:58ফার্স্টলেস
12:59সাপোর্ট
13:00রয়েছে ।
13:00কিন্তু যখন
13:01আপনি অন্যান্য
13:02প্রোগ্রামিং
13:03ল্যাঙ্গুয়েজের
13:04কথা ভাববেন , তখন
13:04JSON - এর সাথে ততটা
13:05সাবলীল
13:06ইন্টিগ্রেশন
13:07পাবেন না ।
13:07আপনাকে অনেক
13:08ম্যানুয়াল
13:09প্রসেসিং করতে
13:09হবে । তাই না ?
13:11এখন দ্বিতীয়
13:12ধাপে , আমরা
13:12ভ্যালিডেশন
13:13এবং
13:13ট্রান্সফরমেশন
13:14করি । আমরা সেই
13:15ডেটা নিই যা
13:16আমরা এখানে
13:17একটি নেটিভ
13:17ফরম্যাটের
13:18মাধ্যমে
13:19বাইন্ড করেছি ।
13:20ধরা যাক আমরা Go
13:21প্রোগ্রামিং
13:21ব্যবহার করছি ।
13:22এখন আমাদের
13:23কাছে একটি strct
13:24আছে । আপনি যদি
13:25পাইথন ব্যবহার
13:26করেন , তাহলে
13:27আমাদের কাছে
13:28একটি ক্লাস বা
13:28ডিকশনারি আছে ,
13:29যেখানে
13:30ক্লায়েন্টের
13:31পাঠানো সমস্ত
13:31ডেটা আমাদের
13:32নিজস্ব
13:33প্রোগ্রামিং
13:33ল্যাঙ্গুয়েজের
13:34ফরম্যাটে থাকে
13:35। ক্লায়েন্ট
13:36জাভাস্ক্রিপ্ট
13:37ব্যবহার করছে ।
13:38এটি JSON ব্যবহার
13:39করে ডেটা
13:39পাঠিয়েছে ।
13:40কিন্তু এখন
13:41আমাদের কাছে Go -
13:42তে একটি strct আছে ,
13:42যেখানে একই
13:43ডেটা একটি
13:44ভিন্ন
13:44উপস্থাপনায়
13:45কিন্তু একই
13:46ভ্যালু সহ
13:46রয়েছে । এখন
13:48আমরা সেই ডেটা
13:49নিই এবং তা
13:49ভ্যালিডেট করি
13:50। আমরা নিশ্চিত
13:53করি যে
13:53ক্লায়েন্টের
13:54পাঠানো সমস্ত
13:55ডেটা
13:55প্রত্যাশিত
13:56ফরম্যাটে আছে ।
13:57সমস্ত
13:58বাধ্যতামূলক
13:59ভ্যালু পাঠানো
14:00হয়েছে ।
14:01পাঠানো সমস্ত
14:01ভ্যালু
14:02প্রত্যাশিত
14:03ফরম্যাটে আছে ।
14:04কোনো
14:04বিদ্বেষপূর্ণ
14:05উদ্দেশ্য নেই ।
14:07কোনো মিসিং
14:08ভ্যালু নেই
14:08ইত্যাদি
14:09ইত্যাদি । একটি
14:10ভ্যালিডেশন
14:11পাইপলাইনে
14:12আমরা এই
14:12সবকিছুই করি ।
14:13ভ্যালিডেট
14:14করার পরে , আমরা
14:15ঐচ্ছিকভাবে
14:16একটি
14:16ট্রান্সফরমেশনও
14:17করি ।
14:18ট্রান্সফরমেশন
14:19মানে কী ?
14:20ট্রান্সফরমেশন
14:21হলো মূলত
14:22ক্লায়েন্টের
14:22কাছ থেকে আসা
14:23ডেটা
14:24ভ্যালিডেট
14:24করার পরে ,
14:25আমাদের
14:25সার্ভারের
14:26জন্য ডেটা
14:27প্রসেস করা
14:27সুবিধাজনক
14:28করতে আমরা কিছু
14:29পরিবর্তন করি ।
14:30উদাহরণস্বরূপ ,
14:31আমরা ডিফল্ট
14:32সেট করতে পারি ।
14:33ধরা যাক আমাদের
14:34একটি গেট এপিআই
14:35আছে । আমাদের
14:36একটি গেট এপিআই
14:37আছে যেখান থেকে
14:38আমরা সমস্ত বই
14:39ফেচ করছি । আমরা
14:42সমস্ত বই ফেচ
14:43করছি , এবং
14:43ক্লায়েন্ট
14:44একটি কোয়েরি
14:45প্যারামিটার
14:46পাঠাতে পারে যা
14:47হলো ' সর্ট ' , এবং
14:48এর ভ্যালু
14:49হিসেবে নাম
14:49অথবা তারিখ ,
14:52অর্থাৎ বইটির
14:53তৈরির তারিখ
14:54থাকতে পারে ।
14:55তাই না ? এইগুলোই
14:56হলো সেই ভ্যালু
14:57যা ক্লায়েন্ট
14:58পাঠাতে পারে ,
14:58এবং
14:59রিকোয়ারমেন্টটি
15:00হলো — এবং এটি
15:00একটি ভালো
15:01প্যাটার্ন যা
15:02আপনার ব্যাক -
15:03এন্ড অ্যাপে
15:03প্রতিষ্ঠা করা
15:04উচিত — আপনার সব
15:05কোয়েরি
15:06প্যারামিটারকে
15:07অপশনাল ( ঐচ্ছিক )
15:08করার জন্য
15:08যথাসাধ্য
15:09চেষ্টা করা
15:10উচিত । হ্যাঁ ,
15:11এটাই আপনার
15:11রিকোয়ারমেন্ট
15:12হওয়া উচিত ।
15:13আপনার এপিআই
15:14ডিজাইনের
15:14শুরুতেই এটি
15:15প্রতিষ্ঠা
15:16করার জন্য এটি
15:16একটি ভালো
15:17প্যাটার্ন এবং
15:18আমরা পরবর্তী
15:19ভিডিওতে এপিআই
15:19ডিজাইন , সমস্ত
15:20সেরা অনুশীলন ,
15:21রেস্টফুল
15:22আর্কিটেকচার
15:22এবং সবকিছু
15:23নিয়ে আলোচনা
15:24করব , যা এপিআই
15:25ডিজাইন ও এর
15:25মূলনীতি এবং
15:26এপিআই নিয়ে
15:27কীভাবে ভাবতে
15:28হয় , কীভাবে
15:28ডিজাইন করতে
15:29হয় ইত্যাদি
15:30বিষয় নিয়ে ।
15:31সুতরাং , সেখানে
15:31এই বিষয়ে
15:32আপনার সমস্ত
15:33সন্দেহ দূর
15:33হয়ে যাবে , যেমন
15:34— এটিকে কীভাবে
15:35স্ট্রাকচার
15:35করতে হবে ,
15:36কীভাবে শুরু
15:37করতে হবে ।
15:37কিন্তু এই
15:38ভিডিওর জন্য
15:39শুধু একটি তথ্য
15:40হলো , আপনার
15:40এপিআই - এর সমস্ত
15:41কোয়েরি
15:42প্যারামিটারকে
15:43অপশনাল করার
15:43চেষ্টা করা
15:44উচিত । এবং
15:45ট্রান্সফরমেশনের
15:46কথায় ফিরে আসি ,
15:47ধরা যাক
15:48রিকোয়ারমেন্টটি
15:49হলো :
15:49ক্লায়েন্ট '
15:50সর্ট ' কোয়েরি
15:51প্যারামিটারে
15:51দুটি ভ্যালু
15:52পাঠাতে পারে ,
15:53হয় নাম অথবা
15:54তারিখ । এবং যদি
15:55ক্লায়েন্ট
15:55নাম পাঠায় ,
15:56তাহলে আপনাকে
15:57সমস্ত বই
15:58বইয়ের নাম
15:58অনুসারে
15:59সাজাতে হবে ,
16:00অথবা যদি তারিখ
16:00পাঠায় , তাহলে
16:01আপনাকে বইটির
16:02তারিখ অনুসারে
16:03সাজাতে হবে ,
16:04অর্থাৎ বইটি
16:05কোন তারিখে
16:05তৈরি হয়েছিল ।
16:06এখন ,
16:07ট্রান্সফরমেশন
16:08পাইপলাইনে , ধরা
16:09যাক , এই
16:09অনুরোধটি
16:10ভ্যালিডেশনের
16:10মধ্যে দিয়ে
16:11গেল এবং
16:12ক্লায়েন্ট
16:12কোনো কোয়েরি
16:13প্যারামিটার
16:14পাঠায়নি ; এটি
16:15শুধু ' books '
16:15পাঠিয়েছে ,
16:16অর্থাৎ ইউআরএল (
16:17URL ) । এটি কোনো
16:18কোয়েরি
16:19প্যারামিটার
16:19পাঠায়নি ।
16:20ভ্যালিডেশন
16:20পাইপলাইনে , এটি
16:21পার হয়ে যায়
16:22কারণ আপনি একটি
16:23ভালো
16:23প্যাটার্ন
16:23হিসেবে সমস্ত
16:24কোয়েরি
16:24প্যারামিটারকে
16:25ঐচ্ছিক ( optional ) করে
16:26দিয়েছেন , তাই
16:27ভ্যালিডেশন
16:27পাইপলাইন সফল
16:28হয় । আপনি কোনো
16:29ত্রুটি ( error ) পান
16:30না ; আপনি আপনার
16:30ক্লায়েন্টকে
16:31কোনো 400 Bad Request
16:32ত্রুটি পাঠান
16:33না । এটি পার
16:33হয়ে যায় । এখন ,
16:34এটি আপনার
16:35ট্রান্সফরমেশন
16:36পাইপলাইনে
16:36পৌঁছায় । এখন ,
16:37আপনি আপনার
16:38ডাটাবেস
16:38লেয়ারের জন্য
16:39ডেটা প্রসেস
16:40করা সুবিধাজনক
16:41করতে চান , এবং
16:42সেই কারণেই ,
16:43ট্রান্সফরমেশন
16:44পাইপলাইনে
16:44আপনি যা করতে
16:45পারেন : যদি
16:46ক্লায়েন্ট
16:46কোনো কোয়েরি
16:47প্যারামিটার
16:48না পাঠিয়ে
16:49থাকে , আপনি
16:50ডিফল্ট ( defaults ) সেট
16:51করতে পারেন ।
16:52আপনি এখানে
16:53ডিফল্ট সেট
16:54করতে পারেন , যার
16:55মানে হলো
16:55ট্রান্সফরমেশন
16:56পাইপলাইনে
16:57আপনি যা করবেন :
16:58আপনি দেখবেন
16:59কোনো কোয়েরি
16:59প্যারামিটার
17:00পাস করা হয়েছে
17:01কি না ,
17:02সেক্ষেত্রে
17:02আপনি সর্ট - এর
17:03ভ্যালু ডেট
17:04হিসেবে সেট
17:05করবেন , অথবা
17:05প্রয়োজন
17:06অনুযায়ী
17:06এটিকে নেম - এও
17:07সেট করতে পারেন
17:08। এই কারণেই
17:11আমরা
17:11ট্রান্সফরমেশন
17:12পাইপলাইন
17:13ব্যবহার করি ,
17:13যাতে
17:14ক্লায়েন্টের
17:14কাছ থেকে
17:15পাওয়া ডেটা
17:16ডেটাবেস
17:16লেয়ারে বা
17:17সার্ভিস
17:17লেয়ারে
17:18যাওয়ার আগে
17:18আমরা সেটির উপর
17:19কয়েকটি
17:20অপারেশন করতে
17:20পারি । এর ফলে
17:22আমাদের
17:23ডাউনস্ট্রিম
17:24লেয়ারগুলোর
17:24জন্য ডেটা
17:25প্রসেস করা আরও
17:26সহজবোধ্য এবং
17:27সুবিধাজনক
17:27হয়ে ওঠে , যাতে
17:28তারা
17:29প্রত্যাশিত
17:29উপায়ে ডেটা
17:30প্রসেস করতে
17:31পারে । ধরা যাক ,
17:32আমরা কিছুই পাস
17:33করিনি । তাহলে
17:34সার্ভিস
17:35লেয়ারকে
17:35দেখতে হবে সর্ট
17:36ফিল্ডটি পাস
17:37করা হয়েছে কি
17:37না । যদি পাস না
17:38করা হয় , তবে
17:39এটি করতে হবে ।
17:40যদি পাস করা হয়
17:41, তবে এটি করতে
17:42হবে । এরপর
17:43সেখানে একটি
17:43কন্ডিশন
17:44ব্রাঞ্চ তৈরি
17:45হয় । এতে অনেক
17:45অসুবিধা
17:46থাকলেও , এটি
17:47করলে আপনার কোড
17:48অনেক বেশি
17:48পাঠযোগ্য হয় ।
17:49এটি আপনার
17:50কোডকে
17:50প্রসেসিং - এর
17:51একটি
17:51প্রত্যাশিত পথ
17:52অনুসরণ করতে
17:53সাহায্য করে ।
17:53এই কারণেই
17:54আমাদের
17:54ভ্যালিডেশন
17:55এবং
17:55ট্রান্সফরমেশন
17:55পাইপলাইন
17:56রয়েছে । আমরা
17:56এই বিষয়ে খুব
17:57গভীরে যাব না ।
17:58আমরা আগের
17:58ভিডিওতে এটি
17:59নিয়ে আলোচনা
18:00করেছি । এটাই
18:00আপনার
18:01হ্যান্ডলারের
18:01দ্বিতীয় কাজ ।
18:02এখন আপনি
18:04রিকোয়েস্ট
18:04অবজেক্টটি বের
18:05করে নিয়েছেন ,
18:05এবং সেই
18:06অবজেক্ট থেকে
18:06রিকোয়েস্টের
18:07তথ্যগুলোও বের
18:08করে নিয়েছেন ।
18:09এরপর আমরা ডেটা
18:09ভ্যালিডেট
18:10করেছি । আপনি
18:11আপনার
18:11সুবিধামতো
18:12ডেটা
18:12ট্রান্সফর্ম
18:13করেছেন । এখন
18:15আপনার কাছে
18:15একটি সুসংহত
18:16ডেটা ফরম্যাট
18:17আছে যা আপনার
18:18ডাউনস্ট্রিম
18:18লেয়ারগুলো
18:19দ্বারা প্রসেস
18:20হওয়ার জন্য
18:20প্রস্তুত । এখন
18:23এই পর্যায়ে কী
18:25ঘটে ?
18:27কন্ট্রোলার
18:28লেয়ার , তার
18:28সঠিকভাবে
18:29ভ্যালিডেট ও
18:30ট্রান্সফর্ম
18:31করা সমস্ত ডেটা
18:32সহ সার্ভিস
18:32লেয়ারকে কল
18:33করে । এটি সেই
18:36ডেটা এবং
18:36সার্ভিস
18:37লেয়ারের
18:37প্রসেস করার
18:38জন্য
18:38প্রয়োজনীয়
18:39সমস্ত তথ্য
18:40সার্ভিস
18:40লেয়ারে
18:41পাঠিয়ে দেয় ।
18:42উদাহরণস্বরূপ ,
18:43অথেনটিকেশন
18:44সংক্রান্ত
18:44তথ্য যেমন
18:45ইউজার আইডি ,
18:46ইউজার পারমিশন
18:47ইত্যাদি সমস্ত
18:47ডেটা পাঠিয়ে
18:48দেওয়া হয় এবং
18:49তারপর সার্ভিস
18:50লেয়ার
18:51প্রসেসিং শুরু
18:51করে । এখন
18:52সার্ভিস
18:53লেয়ারে কী ঘটে ?
18:56সার্ভিস
18:56লেয়ারের
18:57আদর্শগতভাবে
18:58কোনো ধরনের HTTP
18:59সম্পর্কিত
19:00বিষয় নিয়ে
19:01কাজ করা উচিত
19:02নয় । আমরা
19:03কন্ট্রোলার
19:04লেয়ারে সমস্ত
19:05HTTP সম্পর্কিত
19:05বিষয়
19:06সীমাবদ্ধ
19:06রাখার চেষ্টা
19:07করি , যার পেছনে
19:08যথেষ্ট কারণ
19:09রয়েছে যা আমরা
19:09একটু পরে
19:10আলোচনা করব ।
19:11সার্ভিস
19:12লেয়ারটি কেবল
19:13একটি ফাংশন ।
19:14আপনি সার্ভিস
19:15লেয়ারকে কেবল
19:15একটি ফাংশন
19:16হিসেবে ভাবতে
19:17পারেন যার কোনো
19:18ধরনের
19:18ব্যাকএন্ড বা
19:19ফ্রন্টএন্ড
19:19ইন্টারঅ্যাকশনের
19:20সাথে কোনো
19:21সম্পর্ক নেই ।
19:24আপনি যদি আপনার
19:25সার্ভিস
19:25মেথডটি দেখেন ,
19:26তাহলে এক নজরে
19:27আপনার এটা
19:28বুঝতে পারার
19:29কথা নয় যে এটি
19:30একটি ফাংশন যা
19:31একটি এপিআই - তে
19:31ব্যবহৃত হচ্ছে
19:32। এটি অনুসরণ
19:34করার জন্য একটি
19:35ভালো
19:35প্যাটার্ন ।
19:36আপনার সার্ভিস
19:37লেয়ারটি একটি
19:38বিচ্ছিন্ন
19:39পদ্ধতিতে
19:39সমস্ত
19:39প্রসেসিং করবে
19:40এবং তারপর ডেটা
19:41ফেরত দেবে । এটি
19:42কিছু ডেটা নেবে ,
19:43সেটিকে প্রসেস
19:44করবে এবং
19:45ক্লায়েন্টকে
19:46কী রেসপন্স কোড
19:47ফেরত দেবে , তা
19:47নিয়ে চিন্তা
19:48না করেই কিছু
19:49ডেটা ফেরত দেবে
19:50। এটি কী ধরনের
19:51ডেটা গ্রহণ
19:52করছে ,
19:52ভ্যালিডেশন
19:53ইত্যাদি নিয়ে
19:54আপনার চিন্তা
19:55করার কথা নয় ।
19:57এটি
19:58হ্যান্ডলার
19:58লেয়ারের
19:59দায়িত্ব ;
19:59এখানেই আমরা
20:00দায়িত্বের
20:01সীমারেখা টানি
20:02। আচ্ছা , এখন
20:03সার্ভিস
20:04লেয়ারে কী হয় ?
20:05এটি প্রসেস
20:06করার জন্য
20:06প্রয়োজনীয়
20:07সমস্ত ডেটা
20:07নেয় , অর্থাৎ
20:08আমরা যে সমস্ত
20:09অপারেশন করতে
20:10চাই , সেগুলো
20:10করার জন্য
20:11প্রয়োজনীয়
20:12ডেটা নেয় ।
20:12তারপর , যদি
20:13প্রয়োজন হয় ,
20:14এটি আপনার
20:15ডাটাবেস
20:15অপারেশনের
20:16জন্য
20:16রিপোজিটরি
20:17মেথডকে কল করে ।
20:18অবশ্যই ,
20:19সার্ভিস মেথডও
20:20রয়েছে ।
20:21উদাহরণস্বরূপ ,
20:22যদি এই
20:22সার্ভিসটির
20:23কাজ শুধু কোনো
20:24ক্লায়েন্ট বা
20:25ব্যবহারকারীকে
20:26একটি ইমেল
20:27পাঠানো হয় ,
20:27তাহলে ডেটা
20:28লেয়ারে এটি যা
20:29করে তা হলো , এটি
20:30ইমেল
20:30অ্যাড্রেসটি
20:31গ্রহণ করে এবং
20:32সেই ইমেল
20:33অ্যাড্রেসটি
20:33নেয় । এটি সেই
20:36লজিকটি
20:37কার্যকর করে যা
20:38ক্লায়েন্টকে
20:38ইমেল পাঠায়
20:39এবং তারপর এটি
20:40এইরকম দেখতে
20:41একটি
20:41প্রতিক্রিয়া
20:42ফেরত দেয় ।
20:43সফলতার অর্থ
20:44হলো আপনার
20:45হ্যান্ডলারকে '
20:46ট্রু ' ফেরত
20:47পাঠানো । এটি
20:48রিপোজিটরি
20:48মেথড কল না করেও
20:49এইরকম কিছু
20:50করতে পারে ।
20:51আমাদের এইরকম
20:52সার্ভিসও আছে
20:53অথবা যদি এটিকে
20:54ডাটাবেস নিয়ে
20:54কাজ করতে হয় ,
20:55যেমন কিছু ডেটা
20:56সংরক্ষণ করা বা
20:59ডাটাবেস থেকে
21:00কিছু ডেটা আনা ,
21:01তাহলে এটি সেই
21:02ধরনের তথ্যের
21:03জন্য
21:03রিপোজিটরি
21:04লেয়ার
21:04ব্যবহার করে ।
21:06এখন এই
21:07পর্যায়ে কী
21:08ঘটে ? আমাদের
21:09কাছে
21:10রিপোজিটরি
21:11লেয়ার বা
21:12ডাটাবেস
21:12লেয়ার থাকে , যা
21:13নির্ভর করে
21:14আপনি এবং আপনার
21:15টিম কোন
21:15পরিভাষা
21:16ব্যবহার করছেন
21:17তার উপর ।
21:18লেয়ারটি আবার
21:19সেই ডেটা গ্রহণ
21:20করে , যা কিছু
21:21ইনসার্ট বা ফেচ
21:24করার প্রয়োজন
21:25হয় । এখন ডেটার
21:26সমস্ত
21:26প্রয়োজনীয়তা
21:27, উদাহরণস্বরূপ ,
21:28আমরা আমাদের
21:29হ্যান্ডলারের
21:30আপস্ট্রিম
21:31থেকে ' সর্ট '
21:32প্যারামিটারটি
21:33পেয়েছি , যার
21:34ভ্যালু হয় ' নেম
21:35' অথবা ' ডেট ' । এটি
21:37ডেটা সার্ভিস
21:38লেয়ার থেকে
21:39হ্যান্ডলারের
21:39ডেটা নিয়ে
21:40রিপোজিটরি
21:41লেয়ারে
21:41পাঠিয়ে দেয়
21:42এবং রিপোজিটরি
21:43লেয়ার সেই
21:43ডেটা নিয়ে
21:44ডাটাবেস
21:44কোয়েরি তৈরি
21:45করে ।
21:47রিপোজিটরি
21:48লেয়ারের
21:48একমাত্র
21:49দায়িত্ব হলো :
21:50ইনসার্ট করার
21:51জন্য
21:51প্রয়োজনীয়
21:52ডেটা , অথবা
21:53সমস্ত
21:53ফিল্টারিং
21:54ডেটা , সর্টিং
21:55ডেটা , বা
21:55ডাটাবেস থেকে
21:56ডেটা আনার জন্য
21:57প্রয়োজনীয়
21:58সমস্ত ডেটা
21:59গ্রহণ করা । এটি
22:01সমস্ত ডেটা
22:02নিয়ে ডাটাবেস
22:03কোয়েরি তৈরি
22:03করে এবং
22:04ডাটাবেস থেকে
22:05প্রাপ্ত ফলাফল
22:06ফেরত দেয় । এর
22:07একটিই
22:08দায়িত্ব : কিছু
22:08ডেটা গ্রহণ করা ,
22:09একটি ডাটাবেস
22:10অপারেশন
22:11সম্পাদন করা
22:12এবং তা ফেরত
22:12দেওয়া । আবার ,
22:14শর্তটি হলো :
22:14একটি
22:15রিপোজিটরি
22:16মেথড
22:16শুধুমাত্র এক
22:17ধরনের ডেটা
22:18ফেরত দেবে । এর
22:19মানে হলো , ধরা
22:20যাক আপনার দুটি
22:21রিপোজিটরি
22:22মেথড আছে । একটি
22:23সমস্ত বই
22:23পাওয়ার জন্য
22:24এবং অন্যটি
22:25একটি
22:25নির্দিষ্ট বই
22:26পাওয়ার জন্য ।
22:27সেক্ষেত্রে ,
22:28আদর্শগতভাবে
22:29আপনার একই
22:29ফাংশনে কোনো
22:30অপশনাল
22:30প্যারামিটার
22:31পাস করা উচিত
22:32নয় । এবং
22:33অপশনাল
22:33প্যারামিটারের
22:34উপর নির্ভর করে
22:34আপনার একটি
22:35নির্দিষ্ট বই
22:35ফেরত দেওয়া
22:36উচিত নয় বা
22:37সমস্ত বই ফেরত
22:37দেওয়া উচিত
22:38নয় । আপনার
22:38এমনটা করা উচিত
22:39নয় ।
22:40রিপোজিটরি
22:40মেথডের একটিই
22:41দায়িত্ব থাকে
22:42। যদি সেই
22:43রিপোজিটরি
22:43মেথডকে সমস্ত
22:44বই ফেরত দিতে
22:45হয় , তবে তার
22:46সমস্ত বই ফেরত
22:47দেওয়া উচিত
22:48এবং যদি একটি
22:48নির্দিষ্ট বই
22:49ফেরত দেওয়ার
22:50প্রয়োজন হয় ,
22:51তবে তার সেই
22:52বইটির আইডি
22:52নিয়ে বইটি
22:53ফেরত দেওয়া
22:54উচিত । এভাবেই
22:55আপনার
22:55রিপোজিটরি
22:56মেথড ডিজাইন
22:57করা উচিত ।
22:58সুতরাং , এখানে
22:59আমাদের
23:00সার্ভিস
23:00লেয়ার রয়েছে
23:01। সার্ভিস
23:04লেয়ারের
23:05অর্কেস্ট্রেট
23:05করার
23:06দায়িত্বও
23:06রয়েছে , যার
23:07মানে হলো এটি
23:08বিভিন্ন
23:08রিপোজিটরি
23:09মেথড থেকে ফেরত
23:10আসা বিভিন্ন
23:11ডেটা গ্রহণ
23:11করতে পারে এবং
23:12সেই
23:12ডেটাগুলোকে
23:13মার্জ করতে
23:14পারে , বিভিন্ন
23:14ফলাফলের জন্য
23:15প্রয়োজনীয়
23:16ফিল্ডগুলো
23:17নিতে পারে এবং
23:17সেই ডেটা
23:18হ্যান্ডলারের
23:19কাছে ফেরত
23:19পাঠাতে পারে ।
23:21ঠিক আছে , এটাই
23:22সার্ভিস
23:23লেয়ারের
23:23দায়িত্ব ।
23:24একটি সার্ভিস
23:25লেয়ার একাধিক
23:25রিপোজিটরি
23:26মেথড ব্যবহার
23:27করতে পারে । এটি
23:28ডাটাবেস থেকে
23:28বিভিন্ন ধরণের
23:29ডেটা মার্জ
23:30করার জন্য
23:30বিভিন্ন
23:31অপারেশন করতে
23:32পারে ইত্যাদি ।
23:33একটি সার্ভিস
23:33লেয়ার তার
23:34একটি সার্ভিস
23:35মেথডের ভেতরে
23:36অনেক কিছু করতে
23:36পারে । কিন্তু
23:37একটি
23:38রিপোজিটরি
23:38মেথডের একটিই
23:39কাজ করা উচিত ,
23:40যেমন প্রয়োজন
23:41অনুযায়ী কিছু
23:41ডেটা ফেচ করা ,
23:42প্রয়োজন
23:43অনুযায়ী কিছু
23:44ডেটা ইনসার্ট
23:44করা বা
23:45প্রয়োজন
23:45অনুযায়ী কিছু
23:46ডেটা ডিলিট করা
23:47। ঠিক আছে । এবং
23:48সার্ভিস
23:48লেয়ার
23:49বিভিন্ন
23:49রিপোজিটরি
23:50মেথডকে
23:50অর্কেস্ট্রেট
23:51করে বা এটি
23:52এক্সটার্নাল
23:53এপিআই কলিং করে
23:53। এটি
23:54নোটিফিকেশন
23:55পাঠায় । এটি
23:55আপনার
23:56ব্যবহারকারীকে
23:56ইমেল পাঠায়
23:57ইত্যাদি
23:58ইত্যাদি । একটি
23:58এপিআই - এর যা যা
23:59করা প্রয়োজন ,
24:00তার সবকিছুই
24:01এটি করে । এপিআই -
24:02এর সমস্ত
24:03প্রকৃত
24:03প্রসেসিং
24:04সার্ভিস
24:05লেয়ারে ঘটে ।
24:07হ্যান্ডলাররা
24:07ডেটা ফরম্যাট
24:08নিয়ে কাজ করে ।
24:09ইনপুট ডেটা
24:10ফরম্যাট ,
24:11আউটপুট ডেটা
24:12ফরম্যাট ।
24:13প্রকৃত
24:13প্রসেসিং
24:14সার্ভিস
24:14লেয়ারে ঘটে ।
24:15সমস্ত ডাটাবেস
24:16কল রিপোজিটরি
24:17লেয়ারে
24:18সম্পন্ন হয় ।
24:19এভাবেই আমরা
24:20তিনটি
24:20লেয়ারকে
24:21আলাদা করি । ঠিক
24:22আছে । এখন
24:23সার্ভিস
24:23লেয়ার , সর্ট
24:24প্যারামিটারের
24:25উপর ভিত্তি করে
24:26সমস্ত বই আনার
24:27জন্য
24:27রিপোজিটরি
24:28লেয়ারকে কল
24:29করেছে । এটি
24:30রিপোজিটরি
24:30লেয়ার থেকে
24:31রেসপন্স
24:32পেয়েছে এবং
24:32সেই রেসপন্সটি
24:33আমাদের
24:33হ্যান্ডলার বা
24:34কন্ট্রোলারে
24:35ফেরত
24:35পাঠিয়েছে ।
24:36এবং আমরা
24:37সার্ভিস
24:37লেয়ারে ফিরে
24:38এসেছি ।
24:39কন্ট্রোলার
24:40লেয়ার
24:40সার্ভিস
24:41লেয়ারকে কল
24:41করেছে এবং এটি
24:42ডেটা ফেরত
24:43পাঠিয়েছে ।
24:44সার্ভিস
24:44লেয়ার ডেটা
24:45ফেরত
24:45পাঠিয়েছে এবং
24:46এখন আমরা
24:46কন্ট্রোলার
24:47লেয়ারে ফিরে
24:47এসেছি । ঠিক আছে
24:48। এখন কী কী ঘটল ?
24:50প্রথমত , আমরা
24:51কন্ট্রোলার
24:51লেয়ারে
24:52রিকোয়েস্ট
24:53থেকে আসা ডেটার
24:54বাইন্ডিং
24:54করেছি । আমরা
24:56ভ্যালিডেশন
24:56এবং
24:57ট্রান্সফরমেশন
24:58করেছি । ঠিক আছে
24:59। তৃতীয়ত , আমরা
25:01সার্ভিস
25:02লেয়ারকে কল
25:03করেছি , যা ডেটার
25:04আসল প্রসেসিং
25:05করেছে ।
25:06চতুর্থত , আমরা
25:07ডেটা পেয়েছি ।
25:08এরপর কী করার
25:09আছে ?
25:10ক্লায়েন্টের
25:11কাছে রেসপন্স
25:12পাঠানো ।
25:13সুতরাং , আপনারা
25:14দেখতেই
25:15পাচ্ছেন যে
25:15কন্ট্রোলার
25:16লেয়ারই
25:16ক্লায়েন্ট
25:17থেকে সার্ভারে
25:18এবং সার্ভার
25:19থেকে
25:19ক্লায়েন্টে
25:20ডেটা প্রবাহ
25:20নিয়ন্ত্রণ
25:21করে । এটি ডেটা
25:22পেয়েছে । এটি
25:23কিছু
25:23ভ্যালিডেশন ও
25:24ট্রান্সফরমেশন
25:25করেছে । এটি
25:26ডেটা প্রসেস
25:26করেছে এবং এখন
25:27এটি আমাদের
25:28ব্যবহারকারীর
25:29কাছে , অর্থাৎ
25:29ক্লায়েন্টের
25:30কাছে একটি
25:31উপযুক্ত
25:31রেসপন্স ফেরত
25:32পাঠাবে । এবং
25:33সার্ভিস
25:34মেথডটি সফল
25:34হয়েছে কি না ,
25:35অর্থাৎ আমরা
25:36ডেটা প্রসেস
25:37করতে পেরেছি কি
25:38না , তার উপর
25:38নির্ভর করে
25:39কন্ট্রোলার
25:40লেয়ার একটি
25:41উপযুক্ত
25:41রেসপন্স কোড
25:42নির্ধারণ করে ।
25:44এটি ২০০ কোড হতে
25:45পারে ।
25:46সাফল্যের উপর
25:47নির্ভর করে এটি
25:48২০০ , ২০১৪ - ও হতে
25:50পারে । এটি ২০০
25:51সিরিজের
25:51যেকোনো কোড হতে
25:52পারে । অথবা যদি
25:54কোনো ব্যর্থতা
25:55ঘটে , তবে এটি
25:56৪০০ - ও হতে পারে ।
25:57যদি
25:57ক্লায়েন্ট
25:58ফেইলর হয় , তবে
25:59এটি ৪০০ হবে ।
26:00যদি সার্ভার
26:00ফেইলর হয় , তবে
26:01এটি ৫০০ - ও হতে
26:02পারে । এবং একটি
26:05উপযুক্ত
26:05রেসপন্স কোড
26:06নির্ধারণ করা
26:07এবং কোনো
26:07ত্রুটি হলে
26:08একটি উপযুক্ত
26:09এরর মেসেজ
26:09পাঠানো , অথবা
26:10সফলতার ডেটা সহ
26:11একটি উপযুক্ত
26:12সাকসেস মেসেজ
26:13পাঠানো
26:13কন্ট্রোলার
26:14লেয়ারের
26:14দায়িত্ব । এই
26:17ক্ষেত্রে , এটি
26:18২০০ রেসপন্স
26:19কোড সহ সমস্ত বই
26:20, অর্থাৎ
26:20বইগুলোর একটি
26:21অ্যারে
26:22রিটার্ন করবে ,
26:23কারণ এটি
26:23সফলভাবে সমস্ত
26:24বই ফেচ করতে
26:25পেরেছে এবং
26:26তারপর এটি
26:27ক্লায়েন্টের
26:28কাছে ডেটা ফেরত
26:29পাঠাবে । একটি
26:31একক এপিআই কলের
26:32জন্য
26:33রিকোয়েস্ট
26:34লাইফ সাইকেলটি
26:34দেখতে এমনই । আর
26:36এভাবেই
26:37হ্যান্ডলার /
26:38কন্ট্রোলার ,
26:38সার্ভিস এবং
26:39রিপোজিটরিগুলো
26:40একটি
26:40ক্লায়েন্টের
26:41কাছ থেকে ডেটা
26:42প্রসেস করতে
26:43এবং একটি
26:43উপযুক্ত
26:44প্রতিক্রিয়া
26:45ফেরত পাঠাতে
26:46একে অপরের সাথে
26:46ইন্টিগ্রেট বা
26:47সহযোগিতা করে ।
26:49এভাবেই আমরা
26:50এটা করি । এরপর ,
26:51একই প্রসঙ্গে
26:52আমাদের কাছে
26:53মিডলওয়্যার
26:54আছে । এখন , একটি
26:56রিকোয়েস্ট
26:56লাইফ সাইকেলের
26:57এই পুরো চিত্রে
26:58মিডলওয়্যারগুলো
26:59কোথায় আসে ? এখন
27:01চলুন পুরো
27:02রিকোয়েস্ট
27:02লাইফ সাইকেলটি
27:03আবার করি ,
27:04কিন্তু এবার
27:04আমরা
27:04মিডলওয়্যার
27:05ব্যবহার করব
27:06এবং বুঝব
27:06মিডলওয়্যার
27:07কীভাবে কাজ করে
27:08এবং সেগুলো
27:08আসলে কোথায়
27:09আসে । আচ্ছা ,
27:10আমাদের একটি
27:10ক্লায়েন্ট
27:11আছে , চলুন
27:12ক্লায়েন্টটি
27:12কল্পনা না করি ।
27:13এখন ধরা যাক
27:14আমরা একটি
27:14ক্লায়েন্টের
27:15কাছ থেকে
27:16রিকোয়েস্টটি
27:16পেয়েছি । এখন ,
27:19যে মুহূর্তে
27:20আমরা একটি
27:21রিকোয়েস্ট
27:21পাই , যে
27:22মুহূর্তে
27:22রিকোয়েস্টটি
27:23আমাদের
27:24এন্ট্রি
27:24পয়েন্টে
27:25পৌঁছায় , যে
27:26মুহূর্তে
27:26অপারেটিং
27:27সিস্টেম
27:27আমাদের
27:28রিকোয়েস্টটি
27:29এন্ট্রি
27:29পয়েন্টে ,
27:30অর্থাৎ আমাদের
27:31সার্ভারে
27:31ফরোয়ার্ড করে ,
27:32সেই মুহূর্ত
27:33থেকে এর মাঝে
27:34বিভিন্ন ফাংশন
27:34থাকতে পারে ।
27:38যেমন , ধরা যাক
27:38এগুলো হলো
27:39ব্রেকপয়েন্ট ;
27:40এগুলো বিভিন্ন
27:41ফাংশনের
27:42সীমানা । এবং
27:43আমাদের এই
27:43ফাংশনটি থাকতে
27:44পারে , তারপর
27:45কোথাও আমাদের
27:46রাউটিং থাকতে
27:47পারে , যেখানে
27:49আমরা একটি
27:50নির্দিষ্ট
27:51এপিআই কলকে তার
27:51পছন্দের রুটের
27:52উপর ভিত্তি করে
27:53ফরওয়ার্ড করি
27:54। আমরা এখানে
27:55রাউটিং রাখতে
27:56পারি । তারপর
27:58আবার
27:58রাউটিংয়ের
27:59পরেও আমরা
27:59এখানে
27:59মিডলওয়্যার
28:00রাখতে পারি ।
28:02তাই না ? এগুলো
28:03হলো বিভিন্ন
28:04সীমানা । তারপর
28:06আমাদের
28:06হ্যান্ডলার ,
28:07সার্ভিস ,
28:08রিপোজিটরি
28:08অ্যাক্সেস
28:09থাকবে । এরপরও
28:12ক্লায়েন্টের
28:13কাছে রেসপন্স
28:14ফেরত পাঠানো
28:14পর্যন্ত আমরা
28:15এখানে
28:16মিডলওয়্যার
28:16রাখতে পারি ।
28:18এখন চলুন
28:19কল্পনা করি
28:20এখানে কী ঘটছে ।
28:21এই সীমানাগুলো
28:22কী ? আচ্ছা ,
28:23আমাদের এই
28:24সীমানাগুলো
28:24আছে । আমরা
28:25ইতোমধ্যেই এই
28:26অংশটির সাথে
28:27পরিচিত । আমরা
28:28এখানে রাউটিং
28:28করছি এবং এই
28:29অংশটি , যা আমরা
28:30এইমাত্র
28:30দেখলাম ,
28:31হ্যান্ডলার
28:32রিকোয়েস্টটি
28:33গ্রহণ করে । এটি
28:34প্রয়োজনীয়
28:34ডেটা বের করে
28:35নেয় । এটি
28:36ভ্যালিডেশন
28:36এবং
28:36ট্রান্সফরমেশন
28:37করে । এটি
28:38সার্ভিস
28:38লেয়ারকে কল
28:39করে । সার্ভিস
28:39লেয়ার
28:40ডাটাবেস
28:40অপারেশনের
28:41জন্য
28:41রিপোজিটরি
28:41লেয়ার
28:42ব্যবহার করে
28:42প্রসেসিং করে ।
28:43তারপর এটি
28:44রেসপন্স ফেরত
28:44পাঠায় । তারপর
28:45হ্যান্ডলার
28:46রেসপন্সটি
28:46ক্লায়েন্টের
28:47কাছে ফেরত
28:48পাঠায় । আমরা
28:48ইতোমধ্যেই এই
28:49অংশ এবং এই
28:50অংশটি বুঝেছি ।
28:51এখন এই
28:52জিনিসগুলো কী ?
28:53মাঝখানে যে
28:54ফাংশনগুলো
28:55আসছে সেগুলো কী ?
28:57আমরা এই
28:57ফাংশনগুলোকে
28:58মিডলওয়্যার
28:59বলি । এবং নাম
29:01থেকেই আপনি এর
29:02একটি অর্থ
29:02বুঝতে পারবেন
29:03যে এই
29:03ফাংশনগুলো
29:07মাঝামাঝি
29:07কোথাও
29:08এক্সিকিউট
29:08হওয়ার কথা ।
29:09কিসের
29:10মাঝামাঝি ? এই
29:11জিনিসগুলোর
29:12মাঝামাঝি ।
29:13রাউটিং - এর
29:13মাঝামাঝি ।
29:14হ্যান্ডলার ,
29:15সার্ভিস এবং
29:16রিপোজিটরিগুলোর
29:17মাঝামাঝি এবং
29:17ক্লায়েন্টের
29:18কাছে রেসপন্স
29:19ফেরত পাঠানোর
29:20মাঝামাঝি । এই
29:21ফাংশনগুলো
29:21বিভিন্ন
29:22এক্সিকিউশন
29:23এনভায়রনমেন্ট
29:24বা বিভিন্ন
29:24এক্সিকিউশন
29:25কনটেক্সটের
29:26মধ্যবর্তী
29:27সীমানায়
29:27এক্সিকিউট হয়
29:28। একারণেই
29:29এদেরকে
29:30মিডলএয়ার বলা
29:31হয় । এখন
29:31প্রশ্ন হলো ,
29:32আমরা এগুলো কেন
29:33ব্যবহার করি ?
29:34এগুলো আসলে কী
29:35করে ?
29:35মিডলএয়ারগুলোও
29:36সাধারণ
29:37হ্যান্ডলারের
29:38মতোই কাজ করে ,
29:39যা নিয়ে আমরা
29:40আগেই আলোচনা
29:40করেছি । একটি
29:43হ্যান্ডলার
29:43সাধারণত তার
29:44প্যারামিটারে
29:45ডিফল্টভাবে
29:46দুটি জিনিস
29:47গ্রহণ করে —
29:47একটি
29:48রিকোয়েস্ট
29:48এবং একটি
29:49রেসপন্স । এই
29:51জিনিসগুলো
29:52আমাদের
29:52প্রোগ্রামিং
29:53ল্যাঙ্গুয়েজ ,
29:54ফ্রেমওয়ার্ক
29:55বা লাইব্রেরি ,
29:56যা - ই আমরা
29:56সার্ভার তৈরির
29:57জন্য ব্যবহার
29:58করি না কেন , তা
29:59থেকে আসে । এই
30:00দুটি অবজেক্ট —
30:01রিকোয়েস্ট
30:02অবজেক্ট এবং
30:03রেসপন্স
30:04অবজেক্ট —
30:04রানটাইম
30:05এনভায়রনমেন্ট
30:06দ্বারা
30:06ডিফল্টভাবে
30:07হ্যান্ডলারকে
30:08সরবরাহ করা হয়
30:09। মিডলএয়ারের
30:12ক্ষেত্রেও ,
30:13যেহেতু এগুলোও
30:13এক ধরনের
30:14হ্যান্ডলার ,
30:15কিন্তু এদের
30:16একটি অতিরিক্ত
30:16ক্ষমতা রয়েছে
30:17। এগুলোও একটি
30:19রিকোয়েস্ট
30:20এবং একটি
30:21রেসপন্স
30:21অবজেক্ট পায় ,
30:22কিন্তু এর সাথে
30:23নেক্সট ( next ) নামক
30:24আরেকটি জিনিসও
30:25পায় । নেক্সট
30:27হলো একটি ফাংশন
30:28এবং আমরা
30:28শীঘ্রই নেক্সট -
30:29এ ফিরে আসব ।
30:32একটি সাধারণ
30:32মিডলওয়্যার
30:33ল্যাঙ্গুয়েজ
30:34রানটাইম থেকে
30:35ডিফল্টভাবে এই
30:35তিনটি জিনিস
30:36পায় । এটি
30:37তিনটি জিনিস
30:38পায় । একটি হলো
30:39রিকোয়েস্ট
30:39অবজেক্ট , একটি
30:40হলো রেসপন্স
30:40অবজেক্ট যা
30:41রেসপন্স
30:41পরিবর্তন এবং
30:42অন্যান্য
30:42কাজের জন্য
30:43ব্যবহৃত হয়
30:43এবং অন্যটি হলো
30:44নেক্সট ফাংশন ।
30:45নেক্সট
30:45ফাংশনের
30:46ব্যবহার হলো ,
30:47আমরা যে
30:47সীমানাগুলো
30:48দেখেছি , সেখানে
30:49একটি
30:49মিডলওয়্যার
30:50থাকতে পারে ,
30:51আরেকটি
30:51মিডলওয়্যার
30:52থাকতে পারে ,
30:53তারপর রাউটিং
30:54আছে , এবং এখানে
30:55একাধিক
30:55মিডলওয়্যার
30:56থাকতে পারে বা
30:57নাও থাকতে পারে
30:58। রাউটিং থেকে
30:59আমরা সরাসরি
31:00হ্যান্ডলারে
31:00যেতে পারি , তাই
31:01না ? আমরা এই
31:02মিডলওয়্যারগুলো
31:03এড়িয়েও যেতে
31:04পারি । সমস্ত
31:04মিডলওয়্যার
31:05ঐচ্ছিক । এটা
31:06আপনাকে মনে
31:07রাখতে হবে ।
31:08মিডলওয়্যার
31:08হলো ঐচ্ছিক
31:09ফাংশন যা আপনার
31:10প্রয়োজনের
31:11উপর নির্ভর করে
31:12আপনি প্রয়োগ
31:12বা সম্পাদন
31:13করতে পারেন ।
31:14এগুলো থাকতেও
31:15পারে বা নাও
31:16থাকতে পারে ।
31:17ঠিক আছে , এটা
31:18আপনার
31:18প্রয়োজনের
31:19উপর নির্ভর করে
31:20। মিডলওয়্যার
31:21তিনটি অবজেক্ট
31:21গ্রহণ করে ,
31:22যেগুলো হলো
31:23রিকোয়েস্ট ,
31:23রেসপন্স এবং
31:24নেক্সট ।
31:25নেক্সট হলো
31:25একটি ফাংশন যা
31:26মূলত একটি
31:27মিডলওয়্যার
31:28থেকে পরবর্তী
31:28মিডলওয়্যারে
31:29এক্সিকিউশন
31:30পাস করে । এক
31:31মিডলওয়্যার
31:32থেকে পরবর্তী
31:33মিডলওয়্যারে
31:33যাওয়ার জন্য ,
31:34রানটাইম
31:35আমাদের ' next '
31:35নামের একটি
31:36ফাংশন দেয় ।
31:37এবং নাম শুনেই
31:38বোঝা যায় , আমরা
31:39কেবল পরবর্তী
31:40মিডলওয়্যার
31:41বা পরবর্তী
31:41এক্সিকিউশন
31:42ফাংশনে চলে যাই
31:43। আমরা সবসময় '
31:44next ' মিডলওয়্যার
31:45বলতে পারি না ,
31:46কারণ যদি আমরা
31:47এই
31:47এক্সিকিউশনের
31:48দিকে মনোযোগ
31:49দিই , তাহলে এটি
31:50একটি
31:50মিডলওয়্যার
31:51থেকে আমাদের
31:52রাউটিং - এ
31:52যাচ্ছে , অথবা
31:53যদি আপনি এখানে
31:54মনোযোগ দেন ,
31:54তাহলে এটি একটি
31:55মধ্যবর্তী
31:56স্তর থেকে
31:57আমাদের
31:57হ্যান্ডলারে
31:58যাচ্ছে । এই
31:59কারণেই ' next '
31:59ফাংশন
32:00এক্সিকিউশনকে
32:01পরবর্তী
32:01কনটেক্সটে
32:02পাঠিয়ে দেয় ।
32:05পরবর্তী যে
32:06কনটেক্সটটি
32:06রিকোয়েস্ট বা
32:08রেসপন্স
32:08প্রসেস করার
32:09কথা , ' next ' ফাংশন
32:10সেটিকে কল করে ।
32:11ঠিক আছে , এটাই ' next
32:12' ফাংশনের
32:13ব্যবহার । এটি
32:14কেবল
32:15এক্সিকিউশনকে
32:15পরবর্তী
32:16প্রসেসিং
32:16কনটেক্সটে
32:17পাঠিয়ে দেয় ।
32:18এবং ' next '
32:18সম্পর্কে
32:19এটুকুই । ঠিক
32:20আছে । এখন ,
32:21যেহেতু একটি
32:22মিডলওয়্যার
32:23একটি
32:23রিকোয়েস্ট
32:24অবজেক্ট এবং
32:25একটি রেসপন্স
32:25অবজেক্ট গ্রহণ
32:26করে , আপনি
32:27ইতিমধ্যেই
32:27কল্পনা করতে
32:28পারেন যে একটি
32:29মিডলওয়্যার
32:30আপনার
32:30রিকোয়েস্ট
32:31থেকে ভ্যালু
32:31নিতে পারে এবং
32:32শুধুমাত্র এই
32:33পয়েন্ট থেকেই
32:34ক্লায়েন্টের
32:34কাছে একটি
32:35রেসপন্স ফেরত
32:36পাঠাতে পারে ।
32:38রিকোয়েস্টটি
32:38আমাদের রাউটিং
32:39অংশে নাও
32:40পৌঁছাতে পারে ।
32:41রিকোয়েস্টটি
32:42রাউটিং
32:42অ্যালগরিদম
32:43পর্যন্ত নাও
32:44পৌঁছাতে পারে
32:44এবং এটি
32:45হ্যান্ডলার
32:45পর্যন্তও নাও
32:46পৌঁছাতে পারে ,
32:47যা রিকোয়েস্ট
32:48লাইফ সাইকেলে
32:49অনেক এগিয়ে
32:49থাকে । এই
32:50মিডলওয়্যারটি
32:51কিছু লজিক
32:51সম্পাদন করতে
32:52পারে এবং এই
32:52পর্যায় থেকে
32:53ক্লায়েন্টের
32:54কাছে একটি
32:54প্রতিক্রিয়া
32:55ফেরত পাঠাতে
32:55পারে । তো ঠিক
32:56আছে , যেহেতু এটি
32:57রানটাইম থেকে
32:58একটি রেসপন্স
32:59অবজেক্ট গ্রহণ
33:00করে , এটাই একটি
33:01মিডলওয়্যারের
33:02সক্ষমতা । এটি
33:04রিকোয়েস্ট
33:04থেকে ভ্যালু
33:05নিতে পারে ,
33:06রিকোয়েস্টের
33:06ভ্যালু
33:07পরিবর্তন করতে
33:08পারে এবং
33:08ক্লায়েন্টের
33:09কাছে একটি
33:09প্রতিক্রিয়াও
33:10ফেরত পাঠাতে
33:11পারে । এগুলোই
33:11একটি
33:12মিডলওয়্যারের
33:13সক্ষমতা । এখন
33:14প্রশ্ন হলো ,
33:14আমরা
33:14মিডলওয়্যার
33:15কেন ব্যবহার
33:16করি ? আচ্ছা , কেন
33:17সবকিছু শুধু
33:18হ্যান্ডলারের
33:19মধ্যেই করা হয়
33:20না ? কেন আমরা
33:20বিভিন্ন জিনিস
33:21ব্যবহার করি ? এর
33:22সহজ উত্তর হলো ,
33:23যে কারণে আমরা
33:24ফাংশন ব্যবহার
33:25করি , সেই একই
33:26কারণে । আমরা
33:27ফাংশন কেন
33:27ব্যবহার করি ?
33:31যাতে আমাদের
33:32বিভিন্ন
33:32জায়গায়
33:33বারবার একই কোড
33:34লাইন লিখতে না
33:34হয় । আমরা সেই
33:39কয়েকটি লাইন
33:40একটি ফাংশনের
33:41মধ্যেই লিখতে
33:41পারি । আমরা
33:42সেটিকে একটি
33:43এনভায়রনমেন্টের
33:44মধ্যে গুছিয়ে
33:45রাখতে পারি ।
33:46তারপর আমাদের
33:46প্রয়োজন
33:47অনুযায়ী
33:48বিভিন্ন
33:48জায়গায় সেই
33:49ফাংশনটিকে
33:49বারবার কল করতে
33:50পারি । আপনি এতে
33:52বিভিন্ন
33:53প্যারামিটার
33:53পাস করতে পারেন
33:54এবং
33:54এক্সিকিউশনের
33:55ক্রম বা ফলাফল
33:56পরিবর্তন করতে
33:57পারেন , কিন্তু
33:58আমরা সেই কোডটি
33:59বিভিন্ন
33:59জায়গায়
34:00পুনরায়
34:00ব্যবহার করতে
34:01পারি । এই
34:02কারণেই আমরা
34:02প্রোগ্রামিংয়ে
34:03ফাংশন ব্যবহার
34:04করি । একইভাবে
34:06আমরা
34:06মিডলওয়্যার
34:07ব্যবহার করি
34:08যাতে আমরা
34:09আমাদের
34:09সম্পূর্ণ
34:10এপিআই ( API )
34:10অনুরোধের
34:11জীবনচক্রে
34:12বিভিন্ন
34:12অনুরোধে একই
34:13লজিক বারবার
34:14চালাতে পারি ।
34:16সুতরাং , একটি
34:17ব্যাকএন্ড
34:18অ্যাপ্লিকেশন
34:19হিসেবে , আপনার
34:20অ্যাপ
34:20প্রতিদিন
34:21হাজার হাজার ,
34:22অথবা আপনার
34:23প্ল্যাটফর্মের
34:24জনপ্রিয়তা ও
34:24পরিধির উপর
34:25নির্ভর করে , এটি
34:26লক্ষ লক্ষ বা
34:27কোটি কোটি
34:28অনুরোধ পেতে
34:29পারে । এবং এর
34:30কারণে , আপনাকে
34:31কিছু সাধারণ
34:32অপারেশন করতে
34:33হয় ; যেমন , সেই
34:34সমস্ত
34:34অনুরোধের জন্য
34:35আপনাকে কিছু
34:36নিরাপত্তা
34:37অপারেশন , লগিং
34:38অপারেশন ,
34:38অথেনটিকেশন
34:39অপারেশন এবং
34:40ডেটা পার্সিং
34:41অপারেশন করতে
34:42হয় । এখন , একটি
34:43বিশাল
34:43ব্যাকএন্ড
34:44অ্যাপ্লিকেশন
34:45হিসেবে আপনার
34:46শত শত এবং কখনও
34:47কখনও হাজার
34:47হাজার এপিআই
34:48এন্ডপয়েন্টও
34:49থাকে । এখন
34:50প্রতিটি এপিআই
34:50এন্ডপয়েন্টের
34:51জন্য আপনার
34:52হ্যান্ডলার
34:52থাকবে । এটি
34:53এড়ানোর কোনো
34:54উপায় নেই ।
34:55সেখানে থাকা
34:55বিভিন্ন এপিআই
34:56এন্ডপয়েন্টের
34:57জন্য আপনাকে
34:57বিভিন্ন
34:58হ্যান্ডলার
34:59লিখতে হবে । এখন
35:00যদি আপনার
35:01মিডলওয়্যার
35:01না থাকে , তাহলে
35:02আমাদের
35:03প্রতিটি
35:03হ্যান্ডলারের
35:04জন্য একই ধরনের
35:05অপারেশন করতে
35:06হবে । আমাদের
35:07প্রতিটি
35:07হ্যান্ডলারের
35:08জন্য সেই কোডটি
35:09নকল করতে হবে ।
35:10এবং এই
35:10পর্যায়ে আপনি
35:11হয়তো বলতে
35:12পারেন যে আমরা
35:13একটি ফাংশন
35:13লিখতে পারি এবং
35:14প্রতিটি
35:15হ্যান্ডলারে
35:15সেই ফাংশনটি কল
35:16করতে পারি ।
35:17আপনি তা করতে
35:18পারেন , কিন্তু
35:19এটি এখনও এক
35:20ধরণের
35:20পুনরাবৃত্তি ,
35:21কারণ আপনাকে
35:22প্রতিটি
35:22হ্যান্ডলারে
35:23সেই ফাংশনটি কল
35:24করতে হয় । এই
35:26কোড
35:27ডুপ্লিকেশন
35:27এবং
35:28রিডানডেন্সি
35:28কমানোর জন্যই
35:29এই ব্যবস্থা ।
35:32আমরা কিছু
35:33সাধারণ
35:33অপারেশন , যেমন
35:35সিকিউরিটি ,
35:35লগিং , ডেটা
35:36পাসিং বা
35:37কম্প্রেশন — এই
35:38সমস্ত সাধারণ
35:39অপারেশনের
35:40দায়িত্ব
35:41অর্পণ করি ।
35:43আমরা এই
35:43অংশগুলো
35:44আমাদের
35:44রিকোয়েস্ট
35:45লাইফ সাইকেলের
35:46একটি ভিন্ন
35:47কম্পোনেন্টের
35:47কাছে অর্পণ করি
35:48এবং সেগুলোকে
35:49মিডল লেয়ার
35:50ফাংশন বলি ।
35:51মিডলওয়্যার
35:52ফাংশন , কারণ
35:52এগুলো উপযুক্ত
35:53কম্পোনেন্টে
35:54বা
35:54হ্যান্ডলারে
35:55পৌঁছানোর আগে
35:56মাঝখানে
35:56স্থাপন করা হয়
35:57এবং এই সাধারণ
35:58অপারেশনগুলো
35:59সম্পন্ন করে ।
36:00এবং সেই
36:01অপারেশনগুলোর
36:01ফলাফলের উপর
36:02নির্ভর করে , এটি
36:03এমনকি আমাদের
36:04হ্যান্ডলারে
36:05রিকোয়েস্ট
36:05পৌঁছানোর আগেই
36:06ক্লায়েন্টের
36:07কাছে একটি
36:08রেসপন্স
36:08পাঠাতে পারে ,
36:09যাতে আমাদের
36:10মূল্যবান
36:10সার্ভার
36:11রিসোর্স নষ্ট
36:11না হয় । এই
36:13কারণেই আপনি
36:14মিডলওয়্যার
36:15ব্যবহার করেন ,
36:16যার প্রধান
36:16উদ্দেশ্য হলো
36:17কোড
36:18ডুপ্লিকেশন
36:18কমানো । এখন ,
36:19দ্বিতীয় যে
36:20বিষয়টি মনে
36:21রাখতে হবে তা
36:22হলো ,
36:22মিডলওয়্যারের
36:23ক্রম
36:23গুরুত্বপূর্ণ ।
36:25এই ক্রমটি
36:25গুরুত্বপূর্ণ
36:26কারণ যখন
36:26আমাদের
36:27ক্লায়েন্টের
36:28কাছ থেকে একটি
36:28অনুরোধ এখানে
36:29এন্ট্রি
36:30পয়েন্টে
36:30পৌঁছায় এবং
36:31এখান থেকে শুরু
36:31করে প্রতিটি
36:32মিডলওয়্যার ' next
36:33' ফাংশন ব্যবহার
36:34করে
36:34এক্সিকিউশনটি
36:35পরবর্তী
36:35মিডলওয়্যারে
36:36পাঠিয়ে দেয় ।
36:37ঠিক আছে , এটি
36:37এটিকে পরবর্তী
36:38মিডলওয়্যারে
36:39পাঠায় , তারপর
36:39এটি রাউটিং - এর
36:40মধ্য দিয়ে
36:40যায় , তারপর
36:41রাউটিং
36:41এক্সিকিউশনটি
36:42পরবর্তী
36:42মিডলওয়্যারে
36:43পাঠায় , তারপর
36:44তারপর তারপর ,
36:44এভাবে চলতে
36:45থাকে যতক্ষণ না
36:45ক্লায়েন্টের
36:46কাছে একটি
36:47প্রতিক্রিয়া
36:47ফেরত পাঠানো
36:48হয় । এই সবকিছু
36:49ঘটে ' next '
36:49মিডলওয়্যার
36:50ব্যবহার করে ।
36:51যদি পরবর্তী
36:52কোনো
36:52মিডলওয়্যার
36:53থাকে , তবে
36:53এক্সিকিউশনটি
36:54সেখানে
36:54পাঠানোর জন্য '
36:55next ' ফাংশন
36:55ব্যবহার করা
36:56যেতে পারে ।
36:56বিভিন্ন
36:57মিডলওয়্যারগুলিতে
36:58এক্সিকিউশন
36:59পাঠানোর এই
36:59ক্রমটি
37:00গুরুত্বপূর্ণ ।
37:01এভাবেই আমাদের
37:02অনুরোধটি
37:02প্রক্রিয়া
37:03করা হবে ।
37:04ক্রমটি
37:04গুরুত্বপূর্ণ ।
37:05এখন , এগুলো কিছু
37:06উদাহরণ যেখানে
37:07আমরা সাধারণত
37:08একটি
37:08ব্যাকএন্ড
37:09অ্যাপ্লিকেশনে
37:10মিডলওয়্যার
37:10ব্যবহার করি ,
37:11ধরা যাক
37:12নিরাপত্তার
37:12উদ্দেশ্যে ।
37:13নিরাপত্তার
37:14উদ্দেশ্য হতে
37:14পারে , ধরা যাক
37:15আমাদের
37:16বিভিন্ন
37:16মিডলওয়্যার
37:17আছে । ধরা যাক
37:18আমাদের ' course ' আছে ,
37:19তারপর
37:20নিরাপত্তা
37:20হেডার যোগ করার
37:22জন্য ' security headers '
37:23আছে , তারপর '
37:24authentication '
37:24মিডলওয়্যার
37:25আছে , তারপর ' rate limits
37:27' আছে । চলুন
37:28দেখি এই
37:28মিডলওয়্যারগুলোর
37:29প্রত্যেকটি কী
37:30কাজ করে , তাহলে
37:30আমরা বুঝতে
37:31পারব কেন এগুলো
37:31একটি সাধারণ
37:32ফাংশনের
37:32পরিবর্তে
37:33মিডলওয়্যার ।
37:34আমরা ইতিমধ্যে '
37:35course ' বুঝেছি ।
37:37কোর্স ( Course ) মূলত
37:38একটি
37:38নিরাপত্তা
37:39ব্যবস্থা ,
37:39ব্রাউজার
37:40দ্বারা অনুসরণ
37:41করা একটি
37:41গোপনীয়তা
37:42ব্যবস্থা যা
37:43বলে যে
37:43ব্রাউজারে
37:44চলমান আপনার
37:45অ্যাপ্লিকেশনটি
37:46আপনার নিজের
37:46অরিজিনের
37:47বাইরের
37:48রিসোর্স
37:48অ্যাক্সেস
37:49করতে পারবে না ।
37:50এর মানে হল , যদি
37:51আপনার ডোমেইন
37:52example.com হয় , তবে
37:53আপনি
37:53শুধুমাত্র example.com
37:54থেকেই রিসোর্স
37:55অ্যাক্সেস
37:56করতে পারবেন ।
37:57এটি একটি
37:57সীমাবদ্ধতা যা
37:58ব্রাউজার একজন
37:59ক্লায়েন্ট
38:00হিসেবে আপনার
38:01উপর আরোপ করে ।
38:02এখন , এটিকে
38:02বাইপাস করার
38:03জন্য , যদিও
38:04পুরোপুরি
38:05বাইপাস নয় ,
38:05কিন্তু যদি
38:06রিমোট
38:06রিসোর্সটি
38:07একটি উপযুক্ত
38:08হেডার পাঠায়
38:09যা বলে যে আপনার
38:10ক্লায়েন্টকে
38:11এই সার্ভারের
38:11রিসোর্স
38:12অ্যাক্সেস
38:13করার অনুমতি
38:13আছে , তাহলে
38:14ব্রাউজারটি
38:15রেসপন্স বা সেই
38:16রিকোয়েস্টটি
38:17ব্লক করবে না ।
38:23এই কারণেই
38:23আমাদের কোর্স (
38:24Course ) আছে , যাতে
38:25আমরা সীমাবদ্ধ
38:26করতে পারি যে
38:26কোন ধরনের
38:27ক্লায়েন্ট ,
38:28বিশেষ করে
38:28ওয়েব
38:28অ্যাপগুলো ,
38:29আমাদের
38:29সার্ভারের
38:30সাথে যোগাযোগ
38:31করতে পারবে ।
38:32ঠিক আছে । এখন
38:33সার্ভার সাইডে
38:34যা ঘটে তা হল ,
38:35আপনার সার্ভার
38:36ক্লায়েন্টের
38:37কাছ থেকে
38:37রিকোয়েস্টটি
38:38পায় এবং এটি
38:39কোথা থেকে আসছে
38:40তা পরীক্ষা
38:41করতে হয় । এটি
38:42রানটাইম
38:43দ্বারা
38:43স্বয়ংক্রিয়ভাবে
38:44আমাদের দেওয়া
38:45হয় । অনুরোধটি
38:46কোথা থেকে আসছে ,
38:47আমরা তার একটি
38:48অরিজিন ভ্যালু
38:49পাই । সেই
38:51অরিজিন ভ্যালু
38:52এবং আমাদের
38:53সাথে
38:53যোগাযোগের
38:54জন্য আমরা কোন
38:55কোন অরিজিনকে
38:56অনুমতি দিচ্ছি ,
38:57তার উপর নির্ভর
38:58করে , যদি এটি
38:58একটি অনুমোদিত
38:59অরিজিন হয় , তবে
39:01আমরা কিছু
39:01হেডার সেট করতে
39:02পারি । অর্থাৎ ,
39:04যদি আমাদের
39:04ফ্রন্ট - এন্ড
39:05ডোমেইন , অর্থাৎ
39:06আমাদের ফ্রন্ট -
39:07এন্ড
39:07প্ল্যাটফর্মটি
39:08আমাদের
39:08ব্যাকএন্ড
39:09প্ল্যাটফর্মের
39:10সাথে যোগাযোগ
39:11করার চেষ্টা
39:11করে এবং সেই
39:12শর্তটি সত্য
39:13হয় , অর্থাৎ যদি
39:13এটি আমাদের
39:14ফ্রন্ট - এন্ড
39:15প্ল্যাটফর্ম
39:15হয় ,
39:16সেক্ষেত্রে
39:16আমরা উপযুক্ত
39:17হেডারগুলো যোগ
39:18করতে চাই । আমরা
39:19এই সম্পূর্ণ
39:20ওয়ার্কফ্লোটি
39:20আমাদের '
39:21ব্যাকএন্ড
39:21ফ্রম ফার্স্ট
39:22প্রিন্সিপলস '
39:23প্লেলিস্টের HTTP
39:23ভিডিওতে
39:24আলোচনা করেছি ,
39:25যা আপনি পুরো
39:25কোর্স ফ্লোটি
39:26কীভাবে কাজ করে
39:27তা বোঝার জন্য
39:27দেখতে পারেন ।
39:28আমরা এখানে খুব
39:29গভীরে যেতে চাই
39:30না , কারণ এটি
39:31একটি ভিন্ন
39:32বিষয় । এখন
39:33আমরা এই
39:33নির্দিষ্ট
39:34হেডারগুলো যোগ
39:35করতে চাই যা
39:36ব্রাউজারকে
39:36জানাবে যে এই
39:39অনুরোধটি একই
39:40অরিজিন পলিসির
39:41অধীনে
39:42অনুমোদিত ।
39:42আমরা চাই এটি
39:43তখনই ঘটুক যখন
39:44অরিজিনটি
39:45আমাদের ফ্রন্ট -
39:45এন্ড অরিজিনের
39:46সাথে মিলে যায়
39:47। যদি সেই
39:48শর্তটি পূরণ
39:48হয় , আমরা সেই
39:49হেডারগুলো যোগ
39:50করতে চাই এবং
39:51তারপর সেটিকে
39:51পরবর্তী
39:52মিডলওয়্যারে
39:53পাঠিয়ে দিতে
39:53চাই । আমরা
39:54ইতিমধ্যেই
39:55যেমন দেখেছি ,
39:55এখানে প্রতিটি
39:56মিডলওয়্যার
39:56কিছু একটা করে
39:57এবং সেই
39:57অনুরোধটি
39:58পরবর্তী
39:58মিডলওয়্যারের
39:59কাছে পাঠিয়ে
40:00দেয় অথবা
40:00ক্লায়েন্টের
40:01কাছে একটি
40:01প্রতিক্রিয়া
40:02ফেরত পাঠাতে
40:02পারে । কোর্সের
40:03এই পর্যায়ে
40:04মিডলওয়্যারে
40:05কী ঘটে ? এটি
40:06অনুরোধটি
40:06গ্রহণ করে । এটি
40:07অরিজিনটি বের
40:08করে নেয় । এটি
40:09পরীক্ষা করে
40:10দেখে যে এটি
40:10আমাদের ফ্রন্ট -
40:11এন্ড ডোমেইন
40:11কিনা । যদি এটি
40:12আমাদের ফ্রন্ট -
40:13এন্ড ডোমেইন
40:14হয় , তবে এটি
40:15আমাদের
40:15রেসপন্স
40:16অবজেক্টে কিছু
40:17হেডার যোগ করে ।
40:18এটি আমাদের
40:19কিছু রেসপন্স
40:20হেডার যোগ করে
40:21যে এটি
40:21অনুমোদিত
40:22অরিজিন এবং
40:23ইত্যাদি ।
40:23তারপর এটি
40:24পরবর্তী
40:24এক্সিকিউশন
40:25এনভায়রনমেন্ট
40:26বা পরবর্তী
40:26মিডলওয়্যারের
40:27কাছে পাঠিয়ে
40:28দেয় । ঠিক আছে ,
40:29যদি এটি না মেলে
40:29, তাহলে আমরা
40:30কোনো হেডার যোগ
40:31করি না এবং যখন
40:32আমরা
40:32ক্লায়েন্টের
40:33কাছে
40:33প্রতিক্রিয়া
40:34ফেরত পাঠাই , তখন
40:34ব্রাউজার
40:35ডিফল্টরূপে
40:36অনুরোধটি ব্লক
40:36করে দেবে । ঠিক
40:37আছে । এখন
40:38প্রশ্ন হলো ,
40:38আমরা কেন এটিকে
40:39একটি
40:40মিডলওয়্যার
40:40হিসেবে তৈরি
40:41করেছি ? কারণ এটি
40:42এমন একটি ফাংশন
40:43যা আমাদের
40:46সার্ভার
40:46দ্বারা
40:47প্রাপ্ত
40:47প্রতিটি এপিআই
40:48কলের জন্য
40:49কার্যকর হওয়া
40:50প্রয়োজন ।
40:52এটাই প্রথম
40:53আবশ্যকতা ।
40:53আমরা কোডের
40:54পুনরাবৃত্তি
40:55কমাতে চাই ।
40:56এটিকে অনুরোধ
40:56অবজেক্ট বা
40:57প্রতিক্রিয়া
40:57অবজেক্ট নিয়ে
40:58কাজ করতে হবে ।
40:59এই ক্ষেত্রে
41:00এটি উভয়
41:00নিয়েই কাজ করে
41:01। এটি অনুরোধ
41:02থেকে অরিজিনটি
41:02বের করে নেয় ।
41:03এটি রেসপন্স
41:04হেডারগুলো
41:04পরিবর্তন করে ।
41:05এটাই দ্বিতীয়
41:06আবশ্যকতা ।
41:06প্রতিটি
41:07রিকোয়েস্টের
41:07জন্য কিছু কোড
41:08রান করার
41:08প্রয়োজন হয়
41:09এবং এটিকে
41:09রিকোয়েস্ট ও
41:10রেসপন্স
41:10অবজেক্ট নিয়ে
41:11কাজ করতে হয় ।
41:12একারণেই আমরা
41:12এটিকে একটি
41:13মিডলওয়্যার
41:14বানিয়েছি ,
41:14যাতে প্রতিটি
41:15হ্যান্ডলারের
41:16জন্য আমাদের
41:16এটি করতে না হয়
41:17। ঠিক আছে । এটি
41:18একটি
41:18মিডলওয়্যারের
41:19জন্য একদম সঠিক
41:20আবশ্যকতা ।
41:21একারণেই কোর্স
41:22সাধারণত
41:22হ্যান্ডলার
41:23লেয়ারে নয় ,
41:24মিডলওয়্যার
41:25লেয়ারে
41:25ইমপ্লিমেন্ট
41:26করা হয় । ঠিক
41:27আছে । একইভাবে ,
41:28আমাদের
41:28সার্ভার থেকে
41:29সিকিউরিটি
41:30হেডার আসে ।
41:30আমরা বিভিন্ন
41:31সিকিউরিটি
41:32হেডার সেট করতে
41:33পারি ।
41:33উদাহরণস্বরূপ ,
41:34কন্টেন্ট
41:35সিকিউরিটি
41:35পলিসি , ইত্যাদি ,
41:36ইত্যাদি , এবং
41:37আমরা যে
41:38প্রতিটি এপিআই
41:39কল পাই তার জন্য
41:40এটি সেট করতে
41:40চাই । একারণেই
41:41আমরা এটিকেও
41:42একটি
41:42মিডলওয়্যার
41:43বানিয়েছি ।
41:44এটি
41:44রিকোয়েস্টটি
41:45গ্রহণ করে ,
41:45উপযুক্ত
41:46সিকিউরিটি
41:46হেডারগুলো যোগ
41:47করে , এবং সেটিকে
41:48পরবর্তী
41:48মিডলওয়্যারে
41:49পাঠিয়ে দেয় ।
41:50একইভাবে ,
41:51আমাদের
41:51অথেনটিকেশন
41:52রয়েছে । আমরা
41:53অথেনটিকেশনকে
41:54একটি
41:54মিডলওয়্যার
41:55হিসেবে তৈরি
41:55করি কারণ আমরা
41:56টোকেন পাওয়ার
41:57কাজটি বারবার
41:58করতে চাই না ।
41:59সাধারণত যখন
41:59আমরা
42:00অথেন্টিকেট
42:00করি , তখন আমরা
42:01টোকেনটি নিই ।
42:02আপনি যদি '
42:02ফার্স্ট
42:03প্রিন্সিপলস '
42:03প্লেলিস্টের '
42:04ব্যাক এন্ড '
42:04অংশে থাকা '
42:05অথেন্টিকেশন
42:06অ্যান্ড
42:06অথরাইজেশন '
42:06ভিডিওটি দেখে
42:07থাকেন , তাহলে
42:08আপনি এটি বুঝতে
42:08পারবেন ।
42:09সাধারণত
42:09অথেন্টিকেশনের
42:10ক্ষেত্রে , আমরা
42:11রিকোয়েস্ট
42:12অবজেক্ট থেকে
42:13কোনো এক ধরনের
42:14টোকেন ( যেমন JWT ,
42:15সেশন আইডি
42:16ইত্যাদি ) নিই ।
42:22এরপর আমরা
42:22হেডার , পেলোড বা
42:23আপনার
42:23ইমপ্লিমেন্টেশন
42:24অনুযায়ী
42:25সেখান থেকে
42:25টোকেনটি যাচাই
42:26করার জন্য কিছু
42:27লজিক প্রয়োগ
42:28করি । এই যাচাই
42:31প্রক্রিয়াটি
42:32সফল বা ব্যর্থ
42:33হলে , আমরা
42:34আমাদের
42:34হ্যান্ডলার
42:35লেয়ারে না
42:35গিয়ে বা
42:36রিকোয়েস্টটি
42:37পরবর্তী
42:37মিডলওয়্যারে
42:38ফরোয়ার্ড না
42:39করেই সরাসরি
42:40ক্লায়েন্টের
42:40কাছে একটি 401
42:41আনঅথরাইজড এরর
42:42কোড পাঠিয়ে
42:43দিই । আমরা সাথে
42:45সাথে
42:46ক্লায়েন্টের
42:47কাছে এরর কোডটি
42:47ফেরত পাঠিয়ে
42:48দিই এবং
42:49সেখানেই
42:49রিকোয়েস্টটি
42:50টার্মিনেট করে
42:51দিই । অথবা যদি
42:53এটি সফল হয় ,
42:54আমরা যা করি তা
42:55হলো : আমরা
42:55প্রমাণীকরণ
42:56করি , এবং
42:57প্রয়োজনীয়
42:58সমস্ত বিবরণ
42:59সংগ্রহ করি ,
43:00যেমন
43:00ব্যবহারকারীর
43:01আইডি বা অনুমতি
43:02বা ভূমিকা , এই
43:03ব্যবহারকারী
43:04অ্যাডমিন কিনা ,
43:05ইত্যাদি । আমরা
43:07এই তথ্যগুলো
43:08আমাদের
43:09রিকোয়েস্ট
43:09কনটেক্সটে যোগ
43:10করি এবং এই
43:11কারণেই
43:11রিকোয়েস্ট
43:12কনটেক্সট
43:13আমাদের
43:13পরবর্তী
43:13আলোচনার বিষয়
43:14। আমরা এই তথ্য
43:15আমাদের
43:16রিকোয়েস্ট
43:16কনটেক্সটে যোগ
43:17করে পরবর্তী
43:18মিডলওয়্যারে
43:19পাঠিয়ে দিই ।
43:19আমরা
43:20ক্লায়েন্টের
43:20কাছে সঙ্গে
43:21সঙ্গে কোনো
43:22প্রতিক্রিয়া
43:23পাঠাই না , সেটা
43:23আমরা কেবল
43:24ব্যর্থতার
43:24ক্ষেত্রেই করে
43:25থাকি । এই
43:26কারণেই আমরা
43:27প্রমাণীকরণকে
43:27একটি
43:28মিডলওয়্যার
43:29হিসেবে তৈরি
43:29করি । যাতে
43:30প্রতিটি
43:31অনুরোধের জন্য
43:32এটি
43:34ক্রেডেনশিয়াল
43:35বা টোকেন যাচাই
43:36করে এবং সেই
43:36অনুযায়ী
43:37এক্সিকিউশন
43:38বন্ধ করে দেয়
43:38অথবা
43:39ব্যবহারকারীর
43:39আইডি এবং
43:40ব্যবহারকারীর
43:41ভূমিকার মতো
43:41উপযুক্ত
43:42মেটাডেটা সহ
43:42এক্সিকিউশনটি
43:43পরবর্তী
43:43মিডলওয়্যারে
43:44পাঠিয়ে দেয় ।
43:45একইভাবে রেট
43:46লিমিট । আমরা
43:47রেট লিমিট
43:48প্রয়োগ করি
43:48যাতে কোনো একটি
43:49ক্লায়েন্ট
43:50অল্প সময়ের
43:50মধ্যে অনেক
43:51বেশি অনুরোধ
43:52করতে না পারে ।
43:53আমরা আগে থেকেই
43:56একটি
43:56যুক্তিসঙ্গত
43:57সংখ্যক অনুরোধ
43:57নির্ধারণ করে
43:58দিই যা একটি
43:59ক্লায়েন্ট
43:59একটি
44:00নির্দিষ্ট
44:00সময়ে পাঠাতে
44:01পারবে এবং আমরা
44:02একটি
44:02মিডলওয়্যার
44:03যোগ করি যা তা
44:03পরীক্ষা করে ।
44:04আমরা আইপি
44:05অ্যাড্রেস
44:05ব্যবহার করে
44:06এটি করে থাকি ।
44:07আমরা পরীক্ষা
44:08করে দেখি যে এই
44:09আইপি
44:09অ্যাড্রেসটি
44:10গত ২ সেকেন্ডে
44:10৩০ টির বেশি
44:11এপিআই কল করেছে
44:12কিনা । এই ধরনের
44:13কিছু । আমরা
44:14নিজেরাই
44:14থ্রেশহোল্ড বা
44:15সীমা নির্ধারণ
44:16করি । আমরা কোন
44:17সময়কালের
44:17মধ্যে পরীক্ষা
44:18করতে চাই , তার
44:19থ্রেশহোল্ড
44:19আমরাই ঠিক করি ।
44:20আমরা এপিআই
44:21কলের
44:21থ্রেশহোল্ডও
44:22ঠিক করি , সেটা
44:23৩০ টি এপিআই কল
44:24হবে , ৫০০ টি
44:25এপিআই কল হবে ,
44:25ইত্যাদি
44:26ইত্যাদি । এবং
44:27সেই অনুযায়ী
44:27আমরা আমাদের
44:28রেট লিমিট
44:29প্রয়োগ করি ।
44:29যদি
44:30ক্লায়েন্ট
44:30সীমা অতিক্রম
44:31করে , তাহলে আমরা
44:32কী করি ? আমরা
44:33একটি ৪২৯ এরর
44:33কোড পাঠাই , যা
44:34মূলত আমরা তখন
44:35পাঠাই যখন
44:36ক্লায়েন্টের
44:37কাছ থেকে অনেক
44:38বেশি অনুরোধ
44:39আসে । আমরা
44:39ক্লায়েন্টকে
44:40৪ থেকে ৯
44:40পর্যন্ত একটি
44:41এরর কোড ফেরত
44:42পাঠাই এটা
44:42বোঝাতে যে এই
44:43অল্প সময়ের
44:43মধ্যে অনেক
44:44বেশি অনুরোধ
44:45এসেছে । যদি
44:45ক্লায়েন্ট
44:46সীমা অতিক্রম
44:47না করে , তাহলে
44:48আমরা ' next ' ফাংশন
44:48ব্যবহার করে
44:49এক্সিকিউশনটি
44:50পরবর্তী
44:51মিডলওয়্যারে
44:51পাঠিয়ে দিই ।
44:52ঠিক আছে , এগুলো
44:53হলো সিকিউরিটি
44:54মিডলওয়্যারের
44:55কিছু উদাহরণ ।
44:56একইভাবে ,
44:57আমাদের লগিং
44:57মিডলওয়্যার
44:58এবং মনিটরিং
44:59মিডলওয়্যার
45:00রয়েছে । লগিং
45:01এবং মনিটরিং
45:01মিডলওয়্যারগুলো
45:02মূলত প্রতিবার
45:03যখন আমরা একটি
45:04HTTP অনুরোধ পাই ,
45:05ধরা যাক আমরা
45:06একটি ' get ' অনুরোধ
45:07পেয়েছি , তখন
45:07কাজ করে । আচ্ছা ,
45:09আমরা আমাদের
45:10সার্ভারে
45:10টার্মিনালে বা
45:11লগ ফাইলে এক
45:12ধরনের লগিং
45:13করতে পারি , যাতে
45:14পরে এটি আমাদের
45:15ডিবাগ তথ্যে
45:16সাহায্য করে ।
45:18এটি আমাদের
45:19রিপোর্ট
45:19ইত্যাদিতে
45:20বিভিন্ন
45:20প্যারামিটার
45:21ট্র্যাক করতে
45:22সাহায্য করে ।
45:23প্রতিটি
45:23রিকোয়েস্টের
45:24জন্য , এই
45:24মিডলওয়্যারটি
45:25সেই
45:25রিকোয়েস্ট
45:26থেকে বিভিন্ন
45:26প্যারামিটার
45:27সংগ্রহ করে ।
45:28উদাহরণস্বরূপ ,
45:29আমরা কোন পাথ
45:29অ্যাক্সেস
45:30করার চেষ্টা
45:31করছি , যা হলো ' users ' ,
45:32রিকোয়েস্ট
45:33মেথড কী , যা হলো '
45:33get ' , কোয়েরি
45:34প্যারামিটারগুলো
45:35কী , রিকোয়েস্ট
45:36বডি কী ইত্যাদি
45:37। আমরা প্রতিটি
45:39রিকোয়েস্টের
45:40জন্য অনেক তথ্য
45:41লগ করতে পারি ,
45:42যাতে ডিবাগ করা
45:43এবং অডিট করা
45:44ইত্যাদি সহজ
45:45হয় । আচ্ছা , এটি
45:46হলো
45:46মিডলওয়্যার
45:47লগিংয়ের একটি
45:48উদাহরণ ।
45:48আমাদের
45:49গ্লোবাল এরর
45:49হ্যান্ডলিংও
45:50আছে এবং এটি
45:51খুবই
45:51গুরুত্বপূর্ণ ।
45:52আপনার মনে হবে
45:52প্রতিটি
45:53ব্যাকএন্ড
45:53অ্যাপ্লিকেশনে
45:54কোনো না কোনো
45:55ধরনের গ্লোবাল
45:56এরর
45:56হ্যান্ডলিং
45:56থাকা উচিত ।
45:58যাতে আপনার
45:59অ্যাপ্লিকেশনের
46:00কোন পর্যায়ে
46:01এরর ঘটছে তা
46:01বিবেচ্য না হয়
46:02। এটি
46:04হ্যান্ডলার
46:05লেয়ারে ঘটতে
46:06পারে , সার্ভিস
46:06লেয়ারে ঘটতে
46:07পারে অথবা
46:08বিভিন্ন ফাংশন
46:09বাউন্ডারির
46:10মধ্যে , এই সমস্ত
46:11বিভিন্ন
46:11এক্সিকিউশন
46:12এনভায়রনমেন্টে
46:13চলমান যেকোনো
46:14মিডলওয়্যারে
46:15ঘটতে পারে ।
46:15ত্রুটিটি কোন
46:16পর্যায়ে ঘটছে
46:17তা বিবেচ্য নয়
46:18। এই
46:19মিডলওয়্যারটি
46:20সেই ত্রুটিটি
46:20পেতে পারে । যা - ই
46:22ঘটুক না কেন ,
46:23এটি সেই সাধারণ
46:24ত্রুটিটি পাবে
46:25এবং তার উপর
46:26ভিত্তি করে এটি
46:27খুঁজে বের করতে
46:28পারে যে এটি
46:28একটি
46:29ক্লায়েন্ট
46:29ত্রুটি কিনা ।
46:31এই ত্রুটিটি
46:32ক্লায়েন্ট
46:33ত্রুটি ছিল
46:33নাকি সার্ভার
46:34ত্রুটি ছিল তা
46:35নির্দেশ করার
46:36জন্য আমরা
46:36ত্রুটির ভিতরে
46:37বিভিন্ন
46:37প্যারামিটার
46:38বা ফিল্ড
46:38সংজ্ঞায়িত
46:39করতে পারি ।
46:40আমাদের
46:40সার্ভার
46:41এক্সিকিউশনে
46:41কিছু একটা ভুল
46:42হয়েছে । তার
46:43উপর নির্ভর করে ,
46:44এটি একটি 400 বা 500
46:45এরর পাঠাতে
46:46পারে , এবং এটি
46:47একটি সঠিকভাবে
46:48কাঠামোবদ্ধ
46:49ত্রুটির
46:49বার্তা পাঠাতে
46:50পারে যাতে
46:51সাধারণত একটি
46:52বার্তা বা কিছু
46:53ধরণের কোড থাকে ,
46:54যাতে ফ্রন্ট -
46:55এন্ড কোড বা
46:56আইডি ( কখনও কখনও
46:57আইডি - ও বলা হয় )
46:58এবং
46:58স্ট্যাটাসের
46:59উপর নির্ভর করে
47:00আমাদের
47:00ক্লায়েন্টের
47:01কাছে বিভিন্ন
47:02ব্যবহারকারী -
47:03বান্ধব বার্তা
47:04রেন্ডার করতে
47:05পারে । সুতরাং ,
47:06গ্লোবাল এরর
47:07হ্যান্ডলিং
47:08মিডলওয়্যারের
47:09লক্ষ্য হলো : এটি
47:10আমাদের
47:10অ্যাপের
47:11যেকোনো জায়গা
47:12থেকে একটি
47:12অসংগঠিত
47:13ত্রুটি গ্রহণ
47:14করে । এবং
47:14যেহেতু এটি
47:15একটি
47:15মিডলওয়্যার ,
47:16তাই এটির কাছে
47:16সেই ত্রুটির
47:17অ্যাক্সেস
47:18থাকে । এবং
47:18গ্লোবাল এরর
47:19হ্যান্ডলিং
47:19মিডলওয়্যারের
47:20প্রকৃতির
47:21কারণে , সাধারণত
47:21আমরা আমাদের
47:22মিডলওয়্যার
47:23লাইফ সাইকেলে
47:23বিভিন্ন
47:24পর্যায়ে
47:24বিভিন্ন
47:25মিডলওয়্যার
47:25ব্যবহার করি ।
47:26তাই না ? এটি হলো
47:27এন্ট্রি
47:27পয়েন্ট , এটিই
47:28প্রথম
47:29মিডলওয়্যার
47:29যা কাজ করে , এবং
47:30এটিই শেষ
47:30মিডলওয়্যার ।
47:31সাধারণত যা হয় ,
47:32আমরা এরর
47:33হ্যান্ডলিং
47:33মিডলওয়্যারকে
47:34একদম শেষে রাখি
47:35। আমরা আমাদের
47:36ক্লায়েন্টের
47:37কাছে একটি
47:37রেসপন্স ফেরত
47:38পাঠাই , কারণ এই
47:39বিভিন্ন
47:39এক্সিকিউশনের
47:40যেকোনো
47:41পর্যায়ে এরর
47:41ঘটতে পারে । ফলে ,
47:43শেষের
47:43মিডলওয়্যারটি
47:44কোনো এরর ঘটেছে
47:45কিনা তা যাচাই
47:46করতে পারে । যদি
47:47ঘটে থাকে , তবে
47:48এটি সেই
47:48এররটিকে
47:48সঠিকভাবে
47:49স্ট্রাকচার
47:49করে
47:50ক্লায়েন্টের
47:50কাছে একটি
47:51যথাযথভাবে
47:51স্ট্রাকচার
47:52করা এরর মেসেজ
47:53ফেরত পাঠাতে
47:53পারে । এই
47:54কারণেই আমরা
47:54আমাদের
47:55এক্সিকিউশনের
47:56একেবারে শেষে ,
47:56অর্থাৎ শেষ
47:57মিডলওয়্যার
47:58হিসেবে এরর
47:58মিডলওয়্যার
47:59বা গ্লোবাল এরর
48:00হ্যান্ডলিং
48:00মিডলওয়্যার
48:01ব্যবহার করি ।
48:02এবং যেমনটা আমি
48:03বলেছি ,
48:03মিডলওয়্যারের
48:04ক্রম
48:04গুরুত্বপূর্ণ ,
48:05কারণ আপনি যদি
48:06এরর
48:06মিডলওয়্যারকে
48:07মাঝখানে কোথাও
48:08ব্যবহার করেন ,
48:09তাহলে আমাদের
48:11হ্যান্ডেলারে
48:12এই পর্যায়ে
48:13কোনো এরর ঘটলে ,
48:14এরর
48:14মিডলওয়্যারটি
48:15সেই এরর
48:15অ্যাক্সেস
48:16করতে পারবে না ।
48:17কারণ সেই
48:17মিডলওয়্যারের
48:18এক্সিকিউশন
48:19এখানেই হচ্ছিল ,
48:20কিন্তু আমাদের
48:21এররটি ঘটেছে
48:22এখানের কোনো এক
48:22জায়গায় এবং
48:23রিকোয়েস্টটি
48:24এই দিকে
48:25প্রবাহিত
48:25হচ্ছে । ঠিক আছে ,
48:27এটি একমুখী ।
48:28আমরা এররটি
48:29এখানে ফেরত
48:30পেতে পারি না ।
48:31এই কারণেই
48:31আমাদের মিডল
48:32লেয়ারগুলোকে
48:33কীভাবে
48:33সাজাচ্ছি , সে
48:34বিষয়ে আরও
48:34বেশি করে ভাবা
48:35উচিত । এবার
48:36আগের কথায় আসি ,
48:37একইভাবে
48:37আমাদের
48:38কম্প্রেশন
48:38মিডলওয়্যার
48:39রয়েছে । ফলে ,
48:40যদি আপনার কাছে
48:41একটি বড়
48:41রেসপন্স থাকে ,
48:42ধরা যাক আমাদের
48:43কাছে একটি JSON
48:44আছে যাতে হাজার
48:44হাজার ফিল্ড
48:45রয়েছে , আমরা
48:46সেই
48:46রেসপন্সটিকে
48:47কম্প্রেস করে
48:48ফেরত পাঠানোর
48:48জন্য G ইত্যাদির
48:49মতো কিছু
48:50কম্প্রেশন
48:50অ্যালগরিদম
48:51ব্যবহার করতে
48:52পারি । সাধারণত
48:53আধুনিক
48:53ব্রাউজারগুলোর
48:54সেই
48:54রেসপন্সটিকে
48:55ডিকম্প্রেস
48:56করে এমন একটি
48:57ফরম্যাটে
48:57ফিরিয়ে আনার
48:58ক্ষমতা থাকে যা
48:59ব্রাউজার এবং
48:59ক্লায়েন্টরা
49:00বুঝতে পারে ।
49:01ফলে , ডেটা
49:02স্থানান্তরের
49:03সময় একটি
49:03কম্প্রেসড
49:04ফরম্যাট
49:05ব্যবহৃত হয় ,
49:05কিন্তু
49:06ক্লায়েন্ট
49:06ডিসেন্ট্রালাইজেশন
49:08প্রক্রিয়ার
49:08সময় সেই
49:09কম্প্রেসড
49:10ফরম্যাটটি
49:10আবার একটি
49:11উপযুক্ত
49:11ক্লায়েন্ট
49:12ফরম্যাটে
49:13রূপান্তরিত
49:13হয় , যেমন একটি
49:14জাভাস্ক্রিপ্ট
49:15অবজেক্ট
49:16ইত্যাদি । তাই
49:17না ? আমরা
49:17কম্প্রেশন
49:18ইত্যাদির
49:18ক্ষেত্রেও
49:19মিডলওয়্যার
49:20ব্যবহার করি ।
49:20একইভাবে , ডেটা
49:21পার্সিং ,
49:22সিরিয়ালাইজেশন
49:23এবং ডি -
49:23সিরিয়ালাইজেশনের
49:24প্রক্রিয়াও
49:25আমরা একটি মিডল
49:26লেয়ারের কাছে
49:26অর্পণ করতে
49:27পারি , যাতে
49:28আমাদের এটি
49:28বিভিন্ন
49:29হ্যান্ডেলারে
49:29করতে না হয় ।
49:30অবশ্যই , এটি
49:31আপনার ব্যাক -
49:32এন্ডের
49:32প্রয়োজনীয়তা
49:33, আপনার কোডবেস
49:34এবং আপনি যে
49:35স্ট্যান্ডার্ড
49:35ও স্টাইলিং
49:36স্ট্যান্ডার্ড
49:37ব্যবহার করছেন
49:38তার উপর নির্ভর
49:39করে । কিন্তু
49:40আপনি সেটাও
49:40করতে পারেন :
49:41আপনি
49:41ভ্যালিডেশন ,
49:42ট্রান্সফরমেশন
49:43, ডেটা পাসিং ,
49:43ডেটা বাইন্ডিং ,
49:44সিরিয়ালাইজেশন
49:45এবং
49:45ডিসিরিয়ালাইজেশনের
49:46মতো কাজগুলো
49:47অন্য একটি
49:48মিডলওয়্যারে
49:48অর্পণ করতে
49:49পারেন । সুতরাং ,
49:50এগুলো সবই
49:51মিডলওয়্যার
49:51কীভাবে কাজ করে
49:52তার উদাহরণ , এবং
49:53যেমনটা আমি
49:54বলেছি ,
49:54মিডলওয়্যারের
49:55ক্রম
49:55গুরুত্বপূর্ণ ।
49:56এই কারণেই
49:57সাধারণত
49:58আমাদের
49:58রিকোয়েস্ট
49:59লাইফ সাইকেলে
50:00প্রথম যে
50:00মিডলওয়্যারটি
50:01এক্সিকিউট হয়
50:02তা হলো ' কোর্স ' (
50:03course ) , কারণ যদি
50:04এটি এমন কোনো
50:05অরিজিন থেকে
50:05আসে যার আপনার
50:06সার্ভারে
50:07অ্যাক্সেস
50:07থাকার কথা নয় ,
50:08সেক্ষেত্রে
50:09আপনি আপনার
50:10রিকোয়েস্টের
50:11একেবারে
50:11প্রাথমিক
50:12পর্যায়ে সেই
50:13তথ্যটি জানতে
50:14চাইবেন যাতে
50:14আপনি সেখানেই
50:15রিকোয়েস্টটি
50:16টার্মিনেট
50:17করতে পারেন ; এই
50:18কারণেই ' কোর্স '
50:19প্রাথমিক
50:19পর্যায়ে
50:20এক্সিকিউট হয়
50:21। তারপর আমরা
50:23সাধারণত কোনো
50:23ধরনের লগিং
50:24মিডলওয়্যার
50:25এক্সিকিউট করি ,
50:26এরপর থাকে
50:26অথেন্টিকেশন ,
50:27এবং সবশেষে
50:28থাকে গ্লোবাল
50:28এরর
50:29হ্যান্ডলিং ।
50:30যেমনটা আমি
50:30বলেছি ,
50:31মিডলওয়্যারের
50:32ক্রম
50:32গুরুত্বপূর্ণ ।
50:33আপনি আপনার
50:34অ্যাপ্লিকেশনটি
50:35কীভাবে গঠন
50:36করছেন এবং
50:36আপনার
50:37প্রয়োজনীয়তা
50:38কী , তার উপর
50:38নির্ভর করে ,
50:39এপিআই কলকারী
50:40ক্লায়েন্টকে
50:41একটি উপযুক্ত
50:42অভিজ্ঞতা
50:42প্রদানের জন্য
50:43এই
50:44অনুরোধগুলিকে
50:45কোন ক্রমে
50:45পরিবর্তন করতে
50:46হবে বা
50:47অনুরোধের
50:47জীবনচক্র কোন
50:48ক্রমে অনুসরণ
50:49করা উচিত , তা
50:50নিয়ে ভাবার
50:51জন্য আপনার
50:51কিছুটা সময়
50:52ব্যয় করা উচিত ,
50:53এবং
50:53মিডলওয়্যার
50:54সম্পর্কে
50:55মোটামুটি
50:55এটুকুই । এখন , এই
50:58পর্যায়ে আমরা
50:59অথেনটিকেশন
51:00মিডলওয়্যার
51:01নিয়ে কথা
51:01বলেছি এবং
51:02কীভাবে এটি
51:02ব্যবহারকারীর
51:03আইডি এবং
51:04ব্যবহারকারীর
51:05ভূমিকার মতো
51:05কিছু তথ্য কোনো
51:06এক ধরনের
51:07স্টোরেজে
51:07সংরক্ষণ করে
51:08এবং তা পরবর্তী
51:09মিডলওয়্যার
51:10বা পরবর্তী
51:11হ্যান্ডলারের
51:11কাছে পাঠিয়ে
51:12দেয় । ঠিক আছে ।
51:15এবং সেই
51:16অংশটিকে
51:16রিকোয়েস্ট
51:17কনটেক্সট বলা
51:18হয় ।
51:20রিকোয়েস্ট
51:21কনটেক্সট এমন
51:22একটি জিনিস যা
51:22আপনি অনেক
51:23ব্যাকএন্ড
51:23অ্যাপ্লিকেশনে
51:24দেখতে পাবেন ।
51:26আমরা NodeJS , Golang বা
51:27Python ইত্যাদি যা - ই
51:28ব্যবহার করি না
51:29কেন , প্রতিটি
51:30ফ্রেমওয়ার্ক ,
51:31প্রতিটি ভাষা ,
51:31প্রতিটি
51:32লাইব্রেরি
51:33কোনো না কোনো
51:33ধরনের
51:34রিকোয়েস্ট
51:34কনটেক্সট
51:35ইমপ্লিমেন্টেশন
51:36প্রদান করে ।
51:37রিকোয়েস্ট
51:38কনটেক্সট একটি
51:39বিমূর্ত ধারণা
51:40হতে পারে ,
51:40কিন্তু এটি
51:41একটি বাস্তব
51:42প্রয়োগও বটে ।
51:43আপনি কোন ভাষা
51:44বা পরিবেশ
51:45ব্যবহার করছেন
51:46তার উপর নির্ভর
51:47করে
51:47ইমপ্লিমেন্টেশনের
51:48লজিক ভিন্ন হতে
51:49পারে , কিন্তু এই
51:50ধারণাটি
51:50বিভিন্ন ভাষার
51:51ক্ষেত্রে
51:52প্রায় একই
51:53থাকে । তাহলে এই
51:54ধারণাটি আসলে
51:55কী ? একটি
51:55রিকোয়েস্ট
51:56কনসেপ্ট হলো
51:57মূলত এক ধরনের
51:58স্টোরেজ বা
51:59স্টেট , যা একটি
52:04নির্দিষ্ট
52:04রিকোয়েস্টের
52:05জন্য সীমাবদ্ধ
52:06থাকে । ধরা যাক ,
52:07আপনার একটি
52:07সার্ভার ও একটি
52:08ক্লায়েন্ট
52:08আছে , এবং এর
52:08বাইরেও শত শত বা
52:09হাজার হাজার
52:09ক্লায়েন্ট
52:10রয়েছে ।
52:15প্রতিটি
52:15ক্লায়েন্ট
52:16ভিন্ন ভিন্ন
52:16রিকোয়েস্ট
52:17পাঠায় , আপনার
52:21HTTP সার্ভারের
52:21ইমপ্লিমেন্টেশনের
52:22উপর নির্ভর করে
52:22এই প্রতিটি API কল
52:23বা
52:23রিকোয়েস্টের
52:24সাথে একটি
52:24কনটেক্সট
52:24যুক্ত থাকে ।
52:31আচ্ছা , এগুলোর
52:32প্রতিটিরই
52:33কোনো না কোনো
52:35ধরনের
52:35কনটেক্সট
52:36থাকবে । আর এই
52:37কনটেক্সট কেন
52:38থাকে ? যাতে আমরা
52:41এমন একটি
52:41স্টোরেজ বা
52:42স্টেট যুক্ত
52:43করতে পারি , যা
52:43আমাদের
52:44মিডলওয়্যার
52:45এবং
52:45হ্যান্ডলারের
52:46সীমানা
52:46পেরিয়ে
52:46অ্যাক্সেসযোগ্য
52:47হয় । যেমনটা
52:51আপনারা আগেই
52:51দেখেছেন , যখন
52:52রিকোয়েস্টটি
52:53এখানে পৌঁছায়
52:54এবং
52:54ক্লায়েন্টের
52:55কাছে রেসপন্স
52:56ফেরত পাঠানো
52:57পর্যন্ত
52:57বিভিন্ন ফাংশন
52:58বাউন্ডারি
52:59থাকে । সাধারণত ,
53:00এখানে
53:00প্রসেসিংয়ের
53:01জন্য বিভিন্ন
53:01মিডলওয়্যার
53:02থাকে । একটি
53:03কোর্স
53:03মিডলওয়্যার
53:04আছে । একটি লগইন
53:05মিডলওয়্যার
53:05আছে । তারপর
53:06রাউটিং আছে ।
53:07এরপর
53:07অথেনটিকেশন
53:08মিডলওয়্যার
53:09আছে । তারপর
53:09আমাদের এক
53:10ধরনের
53:10মিডলওয়্যার
53:10থাকে যা
53:11অ্যাপ্লিকেশনের
53:12মধ্যেই
53:12সীমাবদ্ধ । ঠিক
53:13আছে । কিছু
53:13ধরনের পারমিশন
53:14চেক । তারপর
53:15আমাদের
53:15হ্যান্ডলার
53:16লজিক থাকে ।
53:17তারপর সবশেষে
53:17ক্লায়েন্টের
53:18কাছে রেসপন্স
53:18ফেরত পাঠানো
53:19পর্যন্ত
53:19গ্লোবাল এরর
53:20হ্যান্ডলিং
53:20মিডলওয়্যার
53:21ইত্যাদি
53:21ইত্যাদি থাকে ।
53:22আমাদের
53:22বিভিন্ন ধরনের
53:23মিডলওয়ে আছে ।
53:24এখন একটি
53:25কনটেক্সট ।
53:26একটি কনটেক্সট
53:27সাধারণত এক
53:27ধরনের স্টোরেজ ,
53:28সাধারণত একটি
53:29কী - ভ্যালু
53:30পেয়ার । আমরা
53:32কনটেক্সটের
53:33মধ্যে কিছু কী -
53:34ভ্যালু পেয়ার
53:35স্টোর করি যাতে
53:35এই তথ্যগুলো এই
53:36সমস্ত বিভিন্ন
53:37এক্সিকিউশন
53:38এনভায়রনমেন্ট
53:39দ্বারা
53:39অ্যাক্সেসযোগ্য
53:40হয় । এটি এই
53:41সমস্ত
53:42মিডলওয়্যারে
53:43অ্যাক্সেসযোগ্য
53:44। এখন এই
53:44মিডলওয়্যারটি
53:45এই কনটেক্সটে
53:46কোনো ভ্যালু
53:47সেট করতে পারে ।
53:48এখন এই
53:49ভ্যালুটি এই
53:49মিডল লেয়ারের
53:50কাছে এই
53:51পর্যায়ে
53:51অ্যাক্সেসযোগ্য
53:52হবে , সরাসরি সেই
53:53ভ্যালুগুলো
53:54স্পষ্টভাবে
53:55পাস না করেই ,
53:56সিস্টেমটিকে
53:57খুব
53:57ঘনিষ্ঠভাবে
53:58একসাথে কাপল না
53:59করে । এই কারণেই
54:00আমাদের এক
54:00ধরনের স্টেট
54:01থাকে যা এই
54:02সমস্ত
54:02মিডলওয়্যার
54:03এবং এই সমস্ত
54:03হ্যান্ডলার
54:04দ্বারা
54:04অ্যাক্সেসযোগ্য
54:05, তারা সবাই এই
54:06কনটেক্সটটি
54:07গ্রহণ করে । এই
54:08কনটেক্সট , বা
54:08যাকে স্টেটও
54:09বলা হয় , যা এই
54:10রিকোয়েস্টের
54:11মধ্যেই
54:11সীমাবদ্ধ এবং
54:12সমস্ত
54:12এক্সিকিউশন
54:13এনভায়রনমেন্ট
54:14, সমস্ত
54:14মিডলওয়্যার ,
54:15সমস্ত
54:16হ্যান্ডলার
54:16ইত্যাদি
54:17দ্বারা
54:17অ্যাক্সেসযোগ্য
54:18, ঠিক আছে ? যাতে
54:19আমাদের
54:20সিস্টেমটি
54:20ঘনিষ্ঠভাবে
54:21সংযুক্ত না
54:22থাকে , সেজন্য
54:22আমাদের একটি
54:23স্টেট ( state ) আছে ,
54:24যা তাদের সকলের
54:25কাছে
54:25অ্যাক্সেসযোগ্য
54:26এবং সকলের
54:26দ্বারা
54:27পরিবর্তনযোগ্য
54:28, এবং সুবিধার
54:28জন্য এক ধরণের
54:29স্টোরেজও
54:30রয়েছে ।
54:30সুতরাং , এই
54:31উদাহরণে , আমরা
54:32অথেনটিকেশন
54:33মিডলওয়্যারে
54:34যা করেছি তা হলো
54:35: আমরা
54:35ব্যবহারকারীর
54:36ক্রেডেনশিয়াল
54:37যাচাই করেছি ।
54:38যদি এটি একটি
54:39লগইন
54:40প্রচেষ্টা
54:40হয়ে থাকে ,
54:41অর্থাৎ
54:42ব্যবহারকারী
54:42প্রথমবারের
54:43মতো লগইন
54:44করছিলেন , আমরা
54:45ক্রেডেনশিয়াল
54:46, অর্থাৎ ইমেল
54:47এবং
54:47পাসওয়ার্ড
54:48যাচাই করেছি
54:49এবং যদি তা সফল
54:49হয় , আমরা একটি
54:50নতুন
54:51ব্যবহারকারী
54:52তৈরি করেছি । আর
54:53যদি
54:53ব্যবহারকারী
54:54আগে থেকেই
54:54বিদ্যমান
54:55থাকেন , আমরা
54:56ইউজার আইডি এবং
54:56রোলটিও বের করে
54:57নিয়েছি ।
54:58রোলটি ইউজার ,
54:59অ্যাডমিন বা
55:00সেলস , যেকোনো
55:01রোল হতে পারে ,
55:02তাই না ? এটি
55:03আপনার
55:03আর্বিট্রারি
55:04ইমপ্লিমেন্টেশনের
55:05উপর নির্ভর করে
55:05। আমরা আমাদের
55:06অথেনটিকেশন
55:07এবং অথরাইজেশন
55:08ভিডিওতে
55:08ইতিমধ্যেই R ডেক
55:09নিয়ে আলোচনা
55:09করেছি । সুতরাং
55:10সেখান থেকে
55:11আপনি বুঝতে
55:11পারবেন রোল কী
55:12এবং কেন আমরা
55:13সেগুলি
55:13ব্যবহার করি ,
55:14এবং বিভিন্ন
55:14অথেনটিকেশন
55:15পদ্ধতি
55:15সম্পর্কেও
55:16জানতে পারবেন ।
55:17ঠিক আছে । তাহলে
55:18আমাদের এক
55:18ধরণের
55:19অথেনটিকেশন
55:19মেকানিজম আছে
55:20এবং এটি
55:21ব্যবহার করে ,
55:21অথেনটিকেশন
55:22সফল হওয়ার পরে
55:23আমরা বিভিন্ন
55:24তথ্য পাই ।
55:25আমাদের
55:25প্ল্যাটফর্মের
55:26জন্য
55:26ব্যবহারকারীর
55:27আইডি রয়েছে ।
55:27ব্যবহারকারীর
55:28ভূমিকা , সে
55:29সাধারণ
55:29ব্যবহারকারী
55:30নাকি অ্যাডমিন
55:30ইত্যাদি , এই
55:31সমস্ত তথ্য
55:32আমাদের কাছে
55:32থাকে । এছাড়াও
55:33বিভিন্ন
55:34অনুমতি , যেমন —
55:35এই রিসোর্সের
55:35জন্য
55:36ব্যবহারকারীর
55:37পড়ার বা লেখার
55:38অনুমতি আছে
55:38কিনা , ইত্যাদি
55:39ইত্যাদি তথ্যও
55:40থাকে । অনুরোধ
55:42সম্পর্কিত এই
55:43সমস্ত
55:43মেটাডেটা
55:44শুধুমাত্র এই
55:45নির্দিষ্ট HTTP
55:46অনুরোধের
55:47মধ্যেই
55:47সীমাবদ্ধ থাকে
55:48এবং এটি
55:49কনটেক্সটে
55:50সংরক্ষিত হয় ।
55:52ফলে , ধরা যাক ,
55:52আপনার
55:53অথেনটিকেশন
55:54মিডলওয়্যার
55:54এই মানগুলো
55:55কনটেক্সটের
55:56ভেতরে সেট করে
55:57দেয় । তাই
56:04পরবর্তীতে ,
56:04ডাউনস্ট্রিমে ,
56:05আপনার
56:05হ্যান্ডলারগুলো
56:06যখন ডেটা
56:07ইনসার্ট করতে
56:07যায় ( যেমন / books
56:08এন্ডপয়েন্টের
56:09জন্য একটি
56:09পোস্ট এপিআই ) ,
56:10তখন আপনার
56:10হ্যান্ডলার
56:12আপস্ট্রিমে
56:16ব্যবহারকারীর
56:17ক্রেডেনশিয়াল
56:18এবং টোকেন
56:18যাচাই করে এই
56:19তথ্যগুলো
56:20খুঁজে বের করে
56:20এবং অনুরোধের
56:22কনটেক্সটে
56:23সংরক্ষণ করে ।
56:24এখন
56:24হ্যান্ডলারের
56:25মধ্যে কী ঘটে ?
56:27যখন
56:27এক্সিকিউশন
56:28আপনার
56:28হ্যান্ডলারে
56:29পৌঁছায় , তখন
56:30হ্যান্ডলার এই
56:31তথ্যগুলো — যেমন
56:32ইউজার আইডি ,
56:33ইউজার রোল
56:33ইত্যাদি — বের
56:34করে নিতে পারে ।
56:35এবং এটি যা করতে
56:36পারে তা হলো :
56:37এটি একটি বই
56:38ইনসার্ট করতে
56:39চায় । এটি
56:39ডাটাবেসে একটি
56:40বই ইনসার্ট
56:41করতে চায় , তাই
56:42একটি বইয়ের
56:43টেবিলে ইউজার
56:43আইডি নামে একটি
56:44ফিল্ড থাকতে
56:45পারে । সুতরাং ,
56:47ক্লায়েন্টের
56:48ইউজার পেলোড
56:49থেকে ইউজার
56:49আইডির ভ্যালু
56:50নেওয়ার
56:51পরিবর্তে আমরা
56:52যা করি তা হলো :
56:53আমরা
56:53অথেন্টিকেশন
56:54ইনফরমেশন থেকে ,
56:55অর্থাৎ সফল
56:56অথেন্টিকেশনের
56:57ফলাফল থেকে
56:58ইউজার আইডি নিই
56:59। কোন ইউজার এই
57:02এপিআই কলটি
57:03করছে তা আমরা
57:03বের করতে পারি
57:04এবং এভাবেই
57:05আমরা ইউজার
57:06আইডি নিয়ে
57:06ডেটাবেসে
57:07ইনসার্ট করি ।
57:09আর আমরা এটা কেন
57:10করি ? কারণ যদি
57:11আমরা
57:11ক্লায়েন্টের
57:12কাছ থেকে ইউজার
57:13আইডি নিই , তাহলে
57:14কোনো অসৎ
57:15উদ্দেশ্যপ্রণোদিত
57:16ক্লায়েন্ট
57:16আমাদের
57:17সার্ভারে
57:17অপ্রত্যাশিত
57:18অপারেশন
57:19চালানোর জন্য
57:19অন্য কোনো
57:20ইউজারের ইউজার
57:21আইডি পাঠাতে
57:22পারে । এই
57:23কারণেই : যখন
57:24আমরা ইউজার
57:24আইডি
57:25অ্যাক্সেস
57:25করতে চাই , যখন
57:26আমরা এটি স্টোর
57:27করতে চাই , বা
57:28যখন আমরা ইউজার
57:29সম্পর্কিত
57:29বিভিন্ন তথ্য
57:30চেক করতে চাই ,
57:31তখন আমরা সেই
57:32তথ্য
57:32অথেন্টিকেশন
57:33মিডলওয়্যার
57:34থেকে বের করে
57:34একটি
57:35কনটেক্সটে সেভ
57:36করি , এবং
57:36ডাউনস্ট্রিম
57:37মেথড ,
57:37হ্যান্ডলার ও
57:38পরবর্তী
57:39মিডলওয়্যারগুলোতে
57:40সেই ইউজার আইডি
57:41নিয়ে ডেটাবেস
57:42লেয়ারে বা
57:42বিভিন্ন এআরবি
57:43লেয়ারে সেই
57:44তথ্যের উপর
57:45ভিত্তি করে
57:45বিভিন্ন
57:46পারমিশন চেক
57:46করি , অর্থাৎ
57:47ইউজারের একটি
57:48বুক ইনসার্ট
57:49করার অনুমতি
57:49আছে কি না তা
57:50যাচাই করি ।
57:51ব্যবহারকারী
57:52যদি একজন
57:52অ্যাডমিন হন ,
57:53তবে আমরা এখান
57:54থেকে সেই তথ্য
57:55নিতে পারি ।
57:56সুতরাং , সব
57:57মিলিয়ে একটি
57:58কনটেক্সট হলো
57:59একটি শেয়ার্ড
57:59স্টেট যা সমস্ত
58:00মিডলওয়্যার
58:01এবং
58:01হ্যান্ডলারের
58:02কাছে
58:03অ্যাক্সেসযোগ্য
58:04, যাতে আমাদের
58:04সিস্টেম
58:05ঘনিষ্ঠভাবে
58:06সংযুক্ত না
58:06থাকে এবং
58:07আমাদের কাছে
58:07এমন এক ধরনের
58:08স্টেট বা
58:09স্টোরেজ থাকে
58:10যা একটিমাত্র
58:10রিকোয়েস্টের
58:11মধ্যে
58:12সীমাবদ্ধ ।
58:12একইভাবে , আমরা
58:13রিকোয়েস্ট
58:14আইডি সংরক্ষণ
58:15করার জন্য
58:15রিকোয়েস্ট
58:16কনটেক্সট
58:17ব্যবহার করতে
58:18পারি । সুতরাং ,
58:20প্রাথমিকভাবে
58:21আপস্ট্রিমের
58:22কোথাও আমাদের
58:23একটি
58:24মিডলওয়্যার
58:25থাকতে পারে , ধরা
58:26যাক এখানে ,
58:27যেখানে আমরা
58:27একটি ইউনিক
58:28আইডি , ধরা যাক
58:29একটি UU আইডি ,
58:30তৈরি করব এবং
58:31সেটি
58:31কনটেক্সটে
58:32সংরক্ষণ করব ।
58:34সুতরাং , এই
58:35রিকোয়েস্ট
58:36লাইফ সাইকেলের
58:37এক্সিকিউশন
58:37জুড়ে আমরা এই
58:38নির্দিষ্ট
58:39আইডিটি
58:39ব্যবহার করি ।
58:40আমরা আমাদের
58:41কনটেক্সট থেকে
58:42এটি বের করে
58:43বিভিন্ন তথ্যে
58:43ব্যবহার করি ।
58:45আমরা এখানে
58:46আইডিটি লগ করতে
58:47পারি এবং
58:47বিভিন্ন
58:48সার্ভিসে
58:48এপিআই কল করার
58:49জন্য আইডিটি
58:50ব্যবহার করতে
58:51পারি । ধরা যাক
58:52এটি একটি
58:52মাইক্রোসার্ভিস
58:53আর্কিটেকচার ।
58:54সুতরাং আমরা
58:55সেই আইডিটি
58:56নিতে পারি এবং
58:57হেডারের কোথাও
58:58এই আইডিটি
58:58দিয়ে এপিআই কল
58:59করতে পারি । ধরা
59:00যাক , এক্স
59:01রিকোয়েস্ট
59:01আইডি বা এই
59:02জাতীয় কিছু ।
59:03যাতে আমরা যখন
59:04আমাদের লগ অডিট
59:05করি , বা কোনো
59:06কিছু ডিবাগ
59:06করার সময় লগ
59:07পর্যালোচনা
59:08করি , তখন আমরা
59:09রিকোয়েস্টটি
59:10ট্রেস করতে
59:10পারি : এটি কোথা
59:11থেকে শুরু
59:12হয়েছিল , কোন
59:13সার্ভিস থেকে
59:14শুরু হয়েছিল ,
59:14বা এটি কোন কোন
59:15সার্ভিসকে কল
59:16করেছিল ,
59:17ইত্যাদি ,
59:17ইত্যাদি , তাই না
59:18? এবং আমরা এটা
59:19করতে পারি কারণ
59:20আমাদের একটি
59:20শেয়ার্ড
59:21স্টেট আছে , যাকে
59:22রিকোয়েস্ট
59:22কনটেক্সট বলা
59:23হয় , যেখানে
59:23আমরা সেই
59:24রিকোয়েস্টের
59:25জন্য তথ্য
59:25সংরক্ষণ করতে
59:26পারি । আচ্ছা ,
59:27এটি
59:27রিকোয়েস্ট
59:28কনটেক্সট
59:28ব্যবহারের
59:29আরেকটি উদাহরণ
59:30। আমরা আমাদের
59:32ডাউনস্ট্রিম
59:32এক্সটার্নাল
59:33সার্ভিসগুলোতে
59:34ক্যান্সেলেশন
59:35সিগন্যাল ,
59:35অ্যাবোর্ট
59:36সিগন্যাল এবং
59:37ডেডলাইন
59:37পাঠাতেও
59:38রিকোয়েস্ট
59:38কনটেক্সট
59:39ব্যবহার করি ,
59:40যাতে আমাদের
59:40সার্ভিসটি
59:41অনির্দিষ্টকালের
59:42জন্য হ্যাং
59:43হয়ে না যায় ।
59:45এগুলোই হলো
59:45রিকোয়েস্ট
59:46কনটেক্সটের
59:47সেইসব ব্যবহার
59:47যা আমরা
59:48সাধারণত একটি
59:48ব্যাকএন্ড
59:49সার্ভারে
59:50দেখতে পাই । তো
59:50হ্যান্ডলার ,
59:51সার্ভিস ,
59:52রিপোজিটরি ,
59:53মিডলওয়্যার
59:53এবং
59:54রিকোয়েস্ট
59:54কনটেক্সট
59:55সম্পর্কে
59:56এটুকুই ।