আসসালামু আলাইকুম 👋
আমার কাজ দেখুন — চলুন দারুণ কিছু বানাই - ইনশাআল্লাহ
এপিআই ডিজাইন প্ল্যানার
ব্যাকএন্ড ডিজাইন করছেন? প্রজেক্ট ও ফিচার বাছুন — পরিষ্কার REST এন্ডপয়েন্ট প্ল্যান, অথ মেথড, রেট-লিমিট ও স্ট্যাটাস-কোড গাইড, সাথে GraphQL সিদ্ধান্ত পান।
💡 প্রো টিপ: API আলাদা প্রজেক্টে রাখুন আর সাবডোমেইন থেকে সার্ভ করুন — যেমন api.example.com/v1/* — পরিষ্কার, আলাদাভাবে ডিপ্লয়যোগ্য, আর ওয়েব অ্যাপ থেকে আলাদা স্কেল করা যায়।
এপিআই প্ল্যান করিফিচার / রিসোর্স
REST API প্ল্যান · /api/v1
৩৩
এন্ডপয়েন্ট, মোট ৭ রিসোর্স
Auth (Sanctum)
Users
Follow
Posts
Comments (nested)
Notifications
Search
প্রোডাকশন গাইডেন্স
API ভার্সনিং
প্রতিটি রুট /api/v1 দিয়ে শুরু করুন। ব্রেকিং চেঞ্জ লাগলে /v2 আনুন, পুরোনো ক্লায়েন্ট অক্ষত থাকবে।
অথেনটিকেশন
API/মোবাইল ক্লায়েন্টে Sanctum টোকেন; নিজের ওয়েব অ্যাপে session + CSRF।
ভ্যালিডেশন
প্রতিটি রাইট FormRequest ক্লাসে ভ্যালিডেট করুন, কন্ট্রোলারে নয় — পাতলা কন্ট্রোলার, রিইউজেবল রুল, অটো 422।
রেসপন্স
API Resources (ট্রান্সফরমার) ও ধারাবাহিক envelope { data, message } দিয়ে আউটপুট দিন। কাঁচা মডেল ফাঁস করবেন না।
রেট লিমিটিং
গ্রুপভেদে named throttle: login/register (~৫/মিনিট/IP) ও search-এ কড়া; সাধারণ রিডে (~১০০০/ঘণ্টা) ঢিলে।
পেজিনেশন ও কোড
সব লিস্ট পেজিনেট করুন (cursor বা page)। 200/201/204, 401/403, 404, 422 (ভ্যালিডেশন), 429 (throttle) ব্যবহার করুন।
GraphQL
ক্লায়েন্টের যদি এক রাউন্ড-ট্রিপে ফ্লেক্সিবল, নেস্টেড ডেটা (ফিড, ড্যাশবোর্ড) লাগে তবে GraphQL ভাবুন — না হলে REST শিপ, ক্যাশ ও ভার্সন করা সহজ।
পরিষ্কার API মানে অর্ধেক কাজ শেষ
আপনার API হলো ফ্রন্টএন্ড, মোবাইল অ্যাপ ও বাইরের জগতের মধ্যে চুক্তি — আর এলোমেলো হলে প্রতিটা টিমকে ধীর করে। ভালো API একঘেয়ে রকম ধারাবাহিক: রিসোর্স-ভিত্তিক URL, সঠিক HTTP verb, অনুমানযোগ্য JSON, যৌক্তিক স্ট্যাটাস কোড, সঠিক অথ ও রেট লিমিটিং। এই API ডিজাইন প্ল্যানার আপনার প্রজেক্টের জন্য সেই স্ট্রাকচার বানায় — রিসোর্স অনুযায়ী এন্ডপয়েন্ট, প্রস্তাবিত JWT/সেশন কৌশল, রেট-লিমিট ডিফল্ট, আর সত্যিই GraphQL লাগবে কিনা তার সৎ মত। টিমকে ব্রিফ দিতে বা routes ফাইল শুরু করতে ব্যবহার করুন।
সচরাচর জিজ্ঞাসা
REST API কীভাবে স্ট্রাকচার করব?
এন্ডপয়েন্ট রিসোর্স অনুযায়ী গ্রুপ করুন (users, posts, orders) আর অ্যাকশনে HTTP verb ব্যবহার করুন: পড়তে GET, বানাতে POST, আপডেটে PATCH, মুছতে DELETE। URL noun-ভিত্তিক রাখুন (/posts/:id, /getPost নয়)। সঠিক স্ট্যাটাস কোড সহ ধারাবাহিক JSON রিটার্ন করুন। এই প্ল্যানার আপনার প্রজেক্টের জন্য সেটা সাজিয়ে দেয়।
JWT না সেশন অথেনটিকেশন?
মোবাইল অ্যাপ ও SPA যে API ব্যবহার করে তাতে JWT (Bearer token) নিন — স্টেটলেস ও স্কেল করা সহজ। নিজের সার্ভার-রেন্ডার্ড ওয়েব অ্যাপে সেশন কুকি + CSRF সহজ ও নিরাপদ। অনেক অ্যাপ দুটোই রাখে: ওয়েবে সেশন, মোবাইলে JWT।
API ভার্সন করব (/api/v1)?
হ্যাঁ — প্রথম দিন থেকেই প্রতিটি রুট /api/v1 দিয়ে শুরু করুন। এখন কিছু খরচ নেই, পরে অনেক কষ্ট বাঁচায়: ব্রেকিং চেঞ্জ লাগলে /api/v2 আনুন, প্রতিটি পুরোনো মোবাইল অ্যাপ ও ইন্টিগ্রেশন মাইগ্রেট না করা পর্যন্ত v1-এ চলতে থাকে। প্রোডাকশন Laravel API প্রায় সবসময় রুট ভার্সন-ফাইলে ভাগ করে (routes/v1, routes/v2)।
Laravel API কন্ট্রোলার পরিষ্কার রাখব কীভাবে?
প্রতিটি রাইট রিকোয়েস্ট FormRequest ক্লাসে ভ্যালিডেট করুন (কন্ট্রোলারে নয়), প্রতিটি রেসপন্স API Resource দিয়ে দিন যাতে কাঁচা মডেল ফাঁস না হয়, বিজনেস লজিক Service/Action-এ রাখুন, আর এক-কাজের এন্ডপয়েন্টে invokable কন্ট্রোলার ব্যবহার করুন। গ্রুপভেদে named rate limiter দিন (যেমন search ও login-এ কড়া)। এটাই প্রোডাকশন Laravel + Sanctum API-র প্যাটার্ন।
REST-এর বদলে GraphQL দরকার?
সাধারণত না। REST বানানো, ক্যাশ ও ডিবাগ করা সহজ। ক্লায়েন্টের যখন এক রিকোয়েস্টে ফ্লেক্সিবল, গভীর নেস্টেড ডেটা লাগে তখন GraphQL কাজে আসে — যেমন রিচ সোশ্যাল ফিড বা অনেক রিলেটেড এন্টিটির কমপ্লেক্স ড্যাশবোর্ড। বেশিরভাগ CRUD অ্যাপে পরিষ্কার REST API-ই ভালো ও দ্রুত পছন্দ।