এতদিন আমরা Pages দিয়ে স্ট্যাটিক কনটেন্ট হোস্ট করেছি — HTML, CSS, JS ফাইল যা সরাসরি ব্রাউজারে পাঠানো হয়। কিন্তু কখনো কখনো সার্ভারে আসলেই কোড চালাতে হয় — যেমন একটা রিকোয়েস্ট এলে ডেটাবেজ চেক করা, বা রেসপন্স নিজে তৈরি করা। এই পর্ব থেকে আমরা ঢুকছি Workers-এর জগতে — Cloudflare-এর সার্ভারলেস ফাংশন প্ল্যাটফর্ম।
Pages vs Workers — মূল পার্থক্য
| বিষয় | Pages | Workers |
|---|---|---|
| কী দেয় | স্ট্যাটিক ফাইল (আগে থেকে বানানো) | প্রতিটা রিকোয়েস্টে কোড চলে, dynamic রেসপন্স |
| উদাহরণ | React অ্যাপের বিল্ড আউটপুট, ব্লগ পোস্ট | API endpoint, রিডাইরেক্ট লজিক, ডেটা প্রসেসিং |
| কোড চলে কখন | বিল্ড টাইমে (একবার) | প্রতিটা ইনকামিং রিকোয়েস্টে |
সহজ কথায় — Pages হলো "রেডি করা খাবার পরিবেশন করা", আর Workers হলো "অর্ডার অনুযায়ী রান্না করা"। দুটোই একসাথে ব্যবহার করা যায় — Pages দিয়ে ফ্রন্টএন্ড, Workers দিয়ে ব্যাকএন্ড API।
Wrangler CLI ইনস্টল করা
Workers ডেভেলপ করতে Cloudflare-এর অফিসিয়াল CLI টুল Wrangler ব্যবহার হয়।
npm install -g wrangler # Cloudflare অ্যাকাউন্টে লগইন wrangler login
প্রথম Worker তৈরি করা
npm create cloudflare@latest my-first-worker # প্রশ্ন আসবে — "Hello World" Worker টেমপ্লেট বেছে নিন cd my-first-worker
এটা একটা src/index.js ফাইল বানাবে, যেখানে সবচেয়ে বেসিক Worker কোড থাকবে —
// src/index.js
export default {
async fetch(request, env, ctx) {
return new Response("Cloudflare Workers থেকে সালাম!");
},
};
প্রতিটা Worker আসলে একটা fetch ফাংশন — যখনই কোনো রিকোয়েস্ট আসে, এই ফাংশন চলে আর একটা Response রিটার্ন করে। request দিয়ে ইনকামিং রিকোয়েস্ট পড়া যায়, env-এ সিক্রেট/এনভায়রনমেন্ট ভ্যারিয়েবল থাকে (পরের পর্বে দেখব)।
লোকালে টেস্ট করা
wrangler dev # একটা লোকাল URL দেখাবে, যেমন: # http://localhost:8787
এই URL ব্রাউজারে খুললেই "Cloudflare Workers থেকে সালাম!" দেখা যাবে — কোনো লাইভ ডেপ্লয় ছাড়াই।
Dynamic রেসপন্স — request পড়া
এবার একটু বাস্তবসম্মত উদাহরণ — URL-এর query parameter অনুযায়ী ভিন্ন রেসপন্স দেওয়া।
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
const name = url.searchParams.get("name") || "বন্ধু";
return new Response(`স্বাগতম, ${name}!`, {
headers: { "content-type": "text/plain; charset=utf-8" },
});
},
};
// /?name=আরিফ কল করলে দেখাবে: "স্বাগতম, আরিফ!"
JSON API রেসপন্স
একটা Worker একদম একটা ছোট API সার্ভারের মতো কাজ করতে পারে — JSON রিটার্ন করা সবচেয়ে সাধারণ ব্যবহার।
export default {
async fetch(request, env, ctx) {
const data = {
message: "Firebase এর হাতেখড়ি সিরিজ",
totalParts: 12,
author: "ArifStack",
};
return new Response(JSON.stringify(data), {
headers: { "content-type": "application/json" },
});
},
};
এই প্যাটার্নটাই পরের পর্বগুলোতে আরও গভীরে যাব — বিভিন্ন URL path-এ ভিন্ন রেসপন্স (routing), Firebase-এর সাথে সংযোগ, এবং সিক্রেট কী নিরাপদে ব্যবহার।
ডেপ্লয় করা
wrangler deploy # কয়েক সেকেন্ডেই একটা লাইভ URL পাওয়া যাবে: # https://my-first-worker.your-subdomain.workers.dev
লক্ষ্য করুন — এই URL .pages.dev না, বরং .workers.dev। Workers আর Pages আলাদা প্রজেক্ট হিসেবে ডেপ্লয় হয়, কিন্তু চাইলে দুটোকে একসাথেও ব্যবহার করা যায় (Pages Functions দিয়ে, যেটা একটা ভবিষ্যৎ পর্বে দেখব)।
Workers কোথায় বাস্তবে কাজে লাগে
- নিজের API বানানো — ফ্রন্টএন্ড থেকে সরাসরি কোনো থার্ড-পার্টি সার্ভিসে কল না করে, Workers দিয়ে একটা middle-layer বানানো
- সিক্রেট কী লুকানো — যেমন কোনো পেইড API-এর কী, যা ফ্রন্টএন্ড কোডে রাখা ঠিক না
- রিডাইরেক্ট বা URL শর্টেনার — নির্দিষ্ট path-এ রিকোয়েস্ট এলে অন্য কোথাও পাঠানো
- Firebase Admin SDK-এর মতো কাজ — যা ব্রাউজারে নিরাপদে চালানো যায় না
ইন্টারেক্টিভ — Pages vs Workers বেছে নাও
নিচে কিছু বাস্তব কাজের উদাহরণ আছে — ক্লিক করে দেখো কোনটার জন্য Pages, কোনটার জন্য Workers বেশি মানানসই।
নিজে চেষ্টা করো
Exercise:
- Wrangler ইনস্টল করো,
npm create cloudflare@latestদিয়ে প্রথম Worker বানাও। wrangler devদিয়ে লোকালে চালিয়ে দেখো।- উপরের query parameter উদাহরণটা নিজে লিখে
?name=-এ নিজের নাম দিয়ে টেস্ট করো। - একটা JSON রেসপন্স দেওয়া Worker বানাও,
wrangler deployদিয়ে লাইভ করো, ব্রাউজারে বা Postman-এ কল করে দেখো।
পরের পর্বে যা থাকছে
পরের পর্বে আমরা শিখব Workers দিয়ে API রুট বানানো — একাধিক URL path (যেমন /api/books, /api/users) কীভাবে একটা Worker দিয়ে হ্যান্ডেল করতে হয়, আর CORS-এর মতো বাস্তব সমস্যা কীভাবে সামলাতে হয়।