Free YouTube Transcribe

Video transcript

10. What are controllers, services, repositories, middlewares and request context?

Sriniously · 9,537 words · 44 min read

Want to search this transcript, jump the video from any line, or download it as TXT, SRT, or VTT?

Open in the transcript tool

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এটুকুই ।

More from Sriniously

Recently added transcripts

Browse the whole transcript library

This transcript was generated from the captions YouTube publishes for this video. Get the transcript of any YouTube video atfreeyoutubetranscribe.com, free, unlimited, no sign-up.