এলার্টঃ একটি ওয়েবসাইটের ফ্রন্ড-এন্ড কিভাবে কাজ করে, এটা সম্পর্কে ধারণা না থাকলে এই পোস্ট পড়ে আপনি হতাশ হতে পারেন!
RESTfull API এ স্টোরি অফ ওয়েটার অর ডেলিভারি বয়!
হাবলুঃ এইডা আবার কি ভাই? আরে ভাই রেস্ট মানে তো জানি, আরাম করা! ও ডেলিভারি বয় হবে কেন?
এই রেস্ট সেই রেস্ট না রে হাবলু, এটা একটা ওয়েবসাইটের ফ্রন্ড এন্ড এবং ব্যাকেন্ড সার্ভারের মধ্যে থাকা REST বা **Representational State Transfer. **
হাবলুঃ হুয়াট দ্যা ফাউ কথা ভাই! আমি তো জানতাম API নামক একটা বড় ভাই এই কাজ করে! এখানে আবার রেস্ট কই থেকে আসবে!?
জি ঠিকিই বলেছ API ভাই এই কাজটি করে কিন্তু আমাগো এপিআই ভাই যে বড় আপুর চিপায় পরে এই কাজটি করে থাকে ওনিই হচ্ছে আমাগো REST!
হাবলুঃ কি বলেন ভাই! ওনারে তো চিনিনা! বিস্তারিত বলেন তো?
**সার্ভারে ডাটা পাঠানো বল অথবা সার্ভারে থেকে ডাটা ফ্রন্ট-এন্ডে নিয়ে এসে কম্পিটারের স্কিনে দেখানো বল দুই ক্ষেত্রেই আমরা যে ভাইয়াটার সাহায্য নিয়ে থাকি তিনিই আমাদের এপিয়াই ভাই। আর এই ভাই **Representational State Transfer **বা রেস্ট এর সকল কমান্ড মেনেই যত রকম কাজ কর্ম করে থাকে। মোট কথা REST হচ্ছে সার্ভার সাইটে এপিআই লেখার একটা আর্কিটেকচারাল ডিজাইন বা পেটার্ন!আর এই REST এর সকল নিয়ম কানুন মেনে যখন কোনো এপি আই ডিজাইন করা হয় ওদের বলা হয় RESTfull API. **কথা কি ক্লিয়ার না ভেজাল আছে?
হাবলুঃ ক্লিয়ার ভাই কিন্তু মাথায় ঢুকেনা!
ধর, তুমি একটা রেস্টুরেন্টে গেলা এবং একটি বার্গার অর্ডার করলা বলতো এই বার্গার তোমারে কে এনে দিবে?
কেন ভাই রেস্টুরেন্টে থাকা ওয়েটার এনে দিবে।
তেমনি ভাবে আমরা যখন কোনো ওয়েবসাইটে গিয়ে কোনো কিছু জন্য রিকুয়েস্ট করি,এপিআই সেটি ডাটাবেজে থাকা ডাটা গুলো থেকে খোজে বের করে এনে ইউজার কে সেই ডাটা দেখিয়ে থাকে। এক্ষেত্রে সার্ভারে রিকুয়েস্ট করা ডাটা গুলো ডাটাবেজে না থাকলে ইউজারকে এরর বা Not Found, ইত্যদি দেখায়। রেস্টুরেন্টে গিয়ে যদি ওদের আইটেম লিস্টের বাইরের কোনো আইটেম অর্ডার করলে যেমনটি হয় আর কি!
সাধারণত, ফ্রন্ড এন্ড HTTP রিকুয়েস্ট (একটা URL বলা যায়) এর মাধ্যমেই সার্ভার থেকে ডাটা গুলো নিয়ে এসে থাকে! এক্ষেত্রে এটি একটি কল ব্যাক ফাংশন এর সাহায্য নেয় যেখানে req বা রিকুয়েস্ট এবং res বা রেজাল্ট নামে দুটি কন্ডিশন সেট করে দেয়া হয়। FTP নামে আরেকটা রিকুয়েস্টের নাম ও শুনে থাকবে যেটি ফ্রন্ড এন্ড এবং সার্ভারের মধ্যে ফাইল ট্রান্সফার করা নিয়ে কাজ করে।
হাবলুঃ থামেন ভাই! আমি HTTPs নামে আরেকটার নাম শুনছিলাম । এটা কিভাবে কি করে?
এটা অনেকটা HTTP এর মতই কিন্তু সিকিউওরড। তাই এর নাম **Hypertext Transfer Protocol Secure **এসকল রিকুয়েস্টে রেন্ডম ইউজার এর আওতাধীন থাকে না। যেমন ধর তুমি চাওনা তুমি তোমার ওয়েবসাইটে থাকা কার্ড ডিটেইলস গুলো কেউ জানুক। এক্ষেত্রে এই রিকুয়েস্টগুলো এনক্রিপ্টেড করে দেওয়া হয় যার ফলে অন্যরা সেটি বুঝতে বা ইউজ করতে পারেনা।
হাবলুঃ রিকুয়েস্ট তো করা হল এখন ডাটাবেজ থেকে সার্ভার হয়ে ডাটা গুলো ওয়েবসাইটে নিয়ে এসে কেমনে দেখাব? অথবা ওয়েবসাইটে ইনপুট হিসাবে নেওয়া ডাটা গুলো ডাটাবেজে কেমনে পাঠাব?
এই তুই না হাবুলু? এত দারুণ সব প্রশ্ন তোর মাথায় আগে থেকে আসলে তো আর হাবলু থাকার কথা না! আচ্ছা বলছি, এটা কিন্তু কান দিয়ে ঢুকিয়ে বের করা যাবেনা। ছোট বেলায় আর্টিকেল পড়া সময় vowel মুখস্থ করছিলি মনে আছে? A E I O U, এখানে ও ৫ টা জিনিসের কথা মনে রাখবি get, put, patch, post, delete
করলাম। কিন্তু এগুলো খায় নাকি মাথায় দেয়?
আচ্ছা বলছি শুন। এগুলো হচ্ছে HTTP মেথড, এগুলো কে HTTP verb ও বলা হয়ে থাকে। তার মানে হচ্ছে এগুলো ইউজ করে আমরা ওয়েবসাইট, সার্ভার, ডাটাবেজ এর মধ্যে যত রকম নৈতিক সম্পর্ক আছে তা স্থাপন করতে পারি। কোনটা কখন ইউজ করব এইডা তো বলেন ভাই।
আরে একটা একটা বলছি মন দিয়ে শুন, GET. ডাটাবেজ থেকে কোনো ডাটা এনে আমরা যখন ওয়েবসাইটে দেখাতে যাব আমরা সার্ভার সাইটে app.get ইউজ করে কল ব্যাক ফানশনের মাধ্যমে রিকুয়েস্ট করব এবং প্রাপ্ত রেজাল্ট ইউজারকে json ফর্মেটে সেন্ড করে দেব। ফলে ফ্রন্ড এন্ড সেটা ইউজ করতে পাররে,অনেকটা রেস্টুরেন্টে গিয়ে মেনু আইটেম অর্ডার করে চোখ বন্ধ করে খাওয়ার মত আর কি!
POST. আমরা কোনো ওয়েবসাইটে গিয়ে যখন কোনো ফর্ম পূরন করি বা ইনপুট হিসাবে কোনো ডাটা দিয়ে থাকি এগুলো POST রিকুয়েস্টের মাধ্যমে সার্ভার হয়ে ডাটাবেজে চলে যায়। এক্ষেত্রে app.post মেথড ইউজ করে কল ব্যাক ফানশনের মাধ্যমে রিকুয়েস্ট করে front end থেকে নেওয়া ইনপুট ডাটা গুলো body ডাটা হিসেবে ডাটাবেজে পাঠিয়ে দেওয়া হয়।
PUT. এই মেথডের মাধ্যমে ডাটাবেজে থাকা ডাটা গুলু সম্পুর্ণ ভাবে আপডেট করে দেয়া হয়। যেমন ধর, ডেটাবেজে অনেকটা এই রকম একটা অব্জেক্টরূপি ডাটা আছে।
{ id: 1, name: "Hero Alam", title: "Superstar", }
যদি কখনো এই অব্জেক্টরূপী ডাটা টি রিপ্লেস করার দরকার হয় app.put মেথডের সাথে চিরচারিত কল ব্যাক ফানশন ইউজ করে আমারা এই অব্জেক্টরূপী ডাটা টি সম্পুর্ণভাবে বদলে দিতে পারি।
Delete. এটী খুবই সিম্পল এবং সহজ একটা মেথড যা ইউজ করে ডাটাবেইজের কোনো ডাটা মুছে ফেলা হয়। যেটির সিন্টেক্স অনেকটা এই রকমঃ app.delete(path, callback)
Patch. এই মেথডটা PUT মেথডের জাত ভাই তবে কিছুটা ভিন্নতা আছে। PUT মেথডের মধ্যমে আমরা কি করতাম?ডাটাবেজে থাকা একটা অব্জেক্টের সকল ডাটা পরিবর্তন করতে দিতাম বা পুরাতন একটা ডাটাকে নতুন একটা ডাটা দিয়ে রিপ্লেস করে দিতাম। কিন্তু এক্ষেত্রে Patch ডাটাবেজে থাকা একটা অব্জেটের এক বা একাধিক নির্দিষ্ট ডাটা বা প্রোপারটি কে update করে দিতে পারে। যেমনঃ
{
id: 1,
name: "Shakib Khan",
title: "Superstar",
}
এক্ষেত্রে শুধু name প্রোপারটির ভ্যালু চেঞ্জ হয়েছে বাকি সব ঠিকই আছে।
হাবলু ঘুমায় গেছিলো! ঘুম থেকে তুলে ওরে দুইটা কথা বলা যায়, দুইটা কথা মনে রাখবি হাবলু,ডাটাবেজে কোনো একটা অব্জেক্টের সকল ডাটা বা সম্পুর্ণ অব্জেক্টটি পরিবর্তন করতে আমরা PUT ইউজ করব। আবার কোনো একটা অব্জেক্টের মধ্যে থাকা একটী নির্দিষ্ট ডাটা বা প্রোপারটি পরিবর্তন করতে আমরা Patch ইউজ করব।
সতর্কবার্তাঃ আমি এই পোস্টে শুধুমাত্র RESTfull API সম্পর্কে সাম্যকভাবে,বাংলা সিস্টেমে ধারণা দেয়ার চেস্টা করেছি। আপনাদের সম্পুর্ণ ধারণা পেতে হলে হাবলুর মত না ঘুমিইয়ে গুগুল, ইউটিউব এর সাহায্য নিয়ে POSTMAN নামক এক বড় ভাইয়ের ফাকা মাঠ ইউজ করে প্রেক্টিস করে যেতে হবে।