লারাভেল দিয়ে REST API তৈরি করা: একটি সম্পূর্ণ টিউটোরিয়াল

Abu Sayed
6 min readMar 5, 2024

--

এই গাইডটি আপনাকে বলবে কীভাবে লারাভেল ফ্রেমওয়ার্ক ব্যবহার করে একটি পাওয়ারফুল REST API তৈরি করতে হয়। এখানে আমরা REST এর মৌলিক ধারণাগুলি আলোচনা করব, লারাভেলে API রিসোর্স তৈরি করার পদ্ধতি দেখাব এবং কোডের উদাহরণগুলি দিয়ে বিস্তারিত বর্ণনা করব।

Learn Laravel — লারাভেল দিয়ে REST API তৈরি করা: একটি সম্পূর্ণ টিউটোরিয়াল- রেস্টফুল API Explained

ওহে বন্ধুরা! আজকে আমরা জানব কীভাবে লারাভেল ফ্রেমওয়ার্ক ব্যবহার করে একটি শক্তিশালী REST API তৈরি করতে হয়। এটা একটা জটিল বিষয় নাকি? ভয় পেয়ো না, আমি এখান থেকে তোমাদের সাথে থাকব। চিন্তা কর যেন আমরা একসাথে একটি বিশাল ভবনের নকশা আঁকছি। শুরুতে এটা একটু জটিল মনে হতে পারে, কিন্তু একটু একটু করে আমরা সবকিছুই বুঝতে পারব।

REST কী?

REST মানে REpresentational State Transfer। একটু বিচিত্র শোনাচ্ছে তো? এটা হল একটা আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিস তৈরি করার জন্য ব্যবহৃত হয়। এর মূল ধারণা হল ডেটাকে রিসোর্স হিসেবে দেখা এবং ক্লায়েন্ট থেকে এই রিসোর্সগুলিতে অ্যাক্সেস করা।

একটু উদাহরণ দিই। ধর, তুমি একটা অনলাইন বুকস্টোরে বই কিনতে চাও। সেই ওয়েবসাইটের REST API তোমাকে বইয়ের তালিকা দেখার, একটি নির্দিষ্ট বইয়ের তথ্য পাওয়ার, বই অর্ডার করার ইত্যাদি কার্যগুলি করতে দেবে। প্রতিটি কাজ একটি নির্দিষ্ট HTTP মেথড (GET, POST, PUT, DELETE) দিয়ে সম্পন্ন করা হবে।

লারাভেলে API রিসোর্স তৈরি

সুন্দর, এবার আসা যাক মজার অংশে — কীভাবে লারাভেলে API রিসোর্স তৈরি করতে হয়। লারাভেল আমাদের একটা সুন্দর শর্টকাট দিয়েছে — make:resource কমান্ড। এটা একসাথে কন্ট্রোলার, মডেল এবং মাইগ্রেশন ফাইলগুলি তৈরি করে দেবে।

php artisan make:resource Book -rc --api

এই কমান্ড চালিয়ে আমরা Book নামে একটা রিসোর্স পাব। -rc অপশনটা কন্ট্রোলার ও রিসোর্স ক্লাসগুলি তৈরি করবে, আর --api অপশনটা জানাবে যে এটা একটা API রিসোর্স।

কন্ট্রোলার

এবার app/Http/Controllers/BookController.php ফাইলটি খুলে দেখি। এখানে সব ধরনের মেথডগুলি (index(), store(), show(), update(), destroy()) তৈরি করা আছে। এগুলোই হল আমাদের REST এর মূল অপারেশনগুলি।

public function index()
{
return Book::all();
}
public function store(Request $request)
{
$book = Book::create($request->all());
return response()->json($book, 201);
}
public function show(Book $book)
{
return $book;
}
// update এবং destroy মেথডগুলির কোডও এখানে থাকবে

এই মেথডগুলির ভিতরে আমরা এলকোকুয়েন্ট ORM ব্যবহার করে মডেলের সাথে ইন্টারঅ্যাকট করছি। উদাহরণস্বরূপ, index() মেথডটি সব বইয়ের তালিকা ফেরত দিচ্ছে।

রাউটিং সেটআপ

অনেকটা কাজ শেষ। এখন শুধু রাউটগুলি সেটআপ করতে হবে। routes/api.php ফাইলটি খুলে নিচের লাইনগুলি যোগ করি:

Route::apiResource('books', BookController::class);

এই একলাইনের কোডটুকু দিয়েই আমরা সব রাউটগুলি সেটআপ করে ফেললাম! books হল রিসোর্সের URI এবং BookController হল যে কন্ট্রোলারটি এই রাউটগুলি হ্যান্ডেল করবে।

ডাটাবেজ মাইগ্রেশন এবং সিডিং

বাকি রইল ডাটাবেজ সেটআপ করা। database/migrations ফোল্ডারে গিয়ে create_books_table নামের একটা মাইগ্রেশন ফাইল পাবে। সেখানে up() মেথডটিতে নিচের কোডটুকু লিখে ফেলুন:

$table->string('title');
$table->text('description');
$table->decimal('price', 8, 2);
$table->timestamps();

এরপর টারমিনালে নিচের কমান্ডগুলি চালান:

php artisan migrate
php artisan db:seed --class=BookSeeder

BookSeeder একটা সিডার ক্লাস যা কিছু ফェইক ডাটা তৈরি করে দেবে। এই কমান্ডগুলি চালানোর পর আপনার ডাটাবেজে কিছু বইয়ের তথ্য থাকবে।

টেস্টিং আওয়ার API

এবার আমরা লারাভেলের অসাধারণ tinker ফিচারটি ব্যবহার করে আমাদের API টেস্ট করব। টারমিনালে নিচের কমান্ডটি লিখুন:

php artisan tinker

এরপর নিচের কোডগুলি লিখে API এর রেসপন্স দেখে নিন:

$books = App\Models\Book::all();
return $books;
$book = App\Models\Book::find(1);
return $book;
$newBook = new App\Models\Book;
$newBook->title = 'New Book';
$newBook->description = 'This is a new book';
$newBook->price = 19.99;
$newBook->save();
return $newBook;

এই কোডগুলির মাধ্যমে আপনি যথাক্রমে সব বইয়ের তালিকা, একটি নির্দিষ্ট বইয়ের তথ্য এবং একটি নতুন বই তৈরি করতে পারবেন।

কোড উদাহরণ

এখানে একটা ছোট প্রোগ্রাম দেওয়া হল যা লারাভেলে REST API এর কাজ করার ধারণা দেয়:

<?php
namespace App\Http\Controllers;
use App\Models\Book;
use Illuminate\Http\Request;
class BookController extends Controller
{
/**
* Display a listing of the books.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$books = Book::all();
return response()->json($books);
}
/**
* Store a newly created book in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$book = Book::create($request->all());
return response()->json($book, 201);
}
/**
* Display the specified book.
*
* @param \App\Models\Book $book
* @return \Illuminate\Http\Response
*/
public function show(Book $book)
{
return response()->json($book);
}
/**
* Update the specified book in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Book $book
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Book $book)
{
$book->update($request->all());
return response()->json($book);
}
/**
* Remove the specified book from storage.
*
* @param \App\Models\Book $book
* @return \Illuminate\Http\Response
*/
public function destroy(Book $book)
{
$book->delete();
return response()->json(null, 204);
}
}

এই প্রোগ্রামটি একটি BookController ক্লাস নিয়ে তৈরি করা হয়েছে যাতে REST এর বিভিন্ন অপারেশনগুলি (index, store, show, update, destroy) হ্যান্ডেল করার জন্য মেথডগুলি রয়েছে। এই মেথডগুলি লারাভেলের Eloquent ORM ব্যবহার করে Book মডেলের সাথে ইন্টারঅ্যাকট করছে।

উদাহরণস্বরূপ, index() মেথডটি সব বইয়ের তালিকা JSON ফরম্যাটে ফেরত দেয়, আর store() মেথডটি একটি নতুন বই তৈরি করে তার JSON রেপ্রেজেন্টেশন ফেরত দেয়। অন্যান্য মেথডগুলিও একই ভাবে কাজ করে।

সামারি

ওহো! আমরা সফলভাবে লারাভেল দিয়ে একটি REST API তৈরি করে ফেললাম। এটা কি মজার ছিল না? চিন্তা করুন একটু, এই API এর জন্য কী কী ধাপ অনুসরণ করেছিলাম:

  1. REST এর ধারণা জেনেছিলাম
  2. make:resource কমান্ডের মাধ্যমে রিসোর্স তৈরি করেছিলাম
  3. কন্ট্রোলারে মেথডগুলি দেখেছিলাম
  4. রাউটিং সেটআপ করেছিলাম
  5. ডাটাবেজ মাইগ্রেশন ও সিডিং করেছিলাম
  6. tinker দিয়ে API টেস্ট করেছিলাম

এটাই একটা REST API এর মূল ধারণা। কিন্তু একটু মনে রাখবেন, প্রকৃত জীবনের প্রোজেক্টগুলিতে অনেক বেশি জটিলতা থাকতে পারে — ইনপুট ভ্যালিডেশন, অথরাইজেশন, রিলেশনশিপ ম্যানেজমেন্ট, রেটিং লিমিট ইত্যাদি। তবে এই টিউটোরিয়ালটি হল একটা ভাল শুরুর দিক।

একটু ব্রেক নিন এবং এই জিনিসগুলি মাথায় ঢুকিয়ে নিন। তারপর নতুন করে চেষ্টা করে দেখুন। কিছু কনফিউশন থাকলে আমাকে জিজ্ঞেস করতে পারবেন। আমি তোমাদের সাহায্য করার জন্য প্রস্তুত আছি!

বন্ধুরা, এই REST API টিউটোরিয়ালটি আপনাদের ভালো লেগেছে তো? কনফিউশন কিছু থাকলে আমাকে জিজ্ঞেস করুন। এখন আরও কিছু গুরুত্বপূর্ণ বিষয় নিয়ে আলোচনা করা যাক।

রিসোর্স নেস্টিং

কল্পনা করুন, আপনার একটি ব্লগ সাইট আছে যেখানে প্রতিটি পোস্টের নিচে কমেন্টের অপশন রয়েছে। এক্ষেত্রে, কমেন্টগুলিকে পোস্টের নেস্টেড রিসোর্স হিসাবে ধরা হবে। উদাহরণস্বরূপ, /posts/1/comments URL তে GET রিকুয়েস্ট পাঠালে আপনি প্রথম পোস্টের সব কমেন্ট পাবেন।

লারাভেলে এটি করতে হলে routes/api.php ফাইলে নিচের লাইনটি যুক্ত করতে হবে:

Route::resource('posts.comments', CommentsController::class)->only(['index', 'store']);

এবং CommentsController-এ নেস্টেড রিসোর্সের জন্য আলাদা মেথডগুলি লিখতে হবে:

public function index(Post $post)
{
return $post->comments;
}
public function store(Request $request, Post $post)
{
$comment = $post->comments()->create($request->all());
return response()->json($comment, 201);
}

index() মেথডটি নির্দিষ্ট পোস্টটির সব কমেন্ট ফেরত দিবে, আর store() মেথডটি সেই পোস্টে একটি নতুন কমেন্ট তৈরি করবে।

মিড্লেয়ার ব্যবহার

মিড্লেয়ারগুলি হল স্পেশাল ক্লাস যেগুলো HTTP রিকুয়েস্টগুলিকে মনিটর এবং হ্যান্ডেল করে। এগুলো ব্যবহার করা হয় যখন কিছু কাজ রিকুয়েস্ট চলাকালীন করতে হয় — যেমন অথেনটিকেশন চেক করা, লগিং করা ইত্যাদি।

লারাভেলে নতুন একটি মিড্লেয়ার তৈরি করতে হলে নিচের কমান্ডটি চালাতে হবে:

php artisan make:middleware CheckAge

এটি app/Http/Middleware/CheckAge.php ফাইলটি তৈরি করবে। এরপর সেই মিড্লেয়ারের ভিতর handle() মেথডে লজিক লিখতে হবে:

public function handle(Request $request, Closure $next)
{
if ($request->age < 18) {
return response()->json(['message' => 'You must be 18 or older'], 403);
}
    return $next($request);
}

এই মিড্লেয়ারটি যদি কোন রিকুয়েস্টে জুড়ে দেওয়া হয়, তাহলে সেটি বয়স চেক করবে এবং প্রয়োজনীয় রেসপন্স দিবে।

মিড্লেয়ারগুলিকে গ্লোবালি অথবা রাউট-ওয়াইজ ভাবে এসাইন করা যায়। রাউট-ওয়াইজ করতে routes/api.php ফাইলে নিচের লাইনটি যুক্ত করুন:

Route::middleware('CheckAge')->group(function () {
Route::get('/movies', [MoviesController::class, 'index']);
// আরও রাউটগুলি এখানে যুক্ত করুন
});

এখন /movies রাউটটিতে রিকুয়েস্ট আসলেই CheckAge মিড্লেয়ারটি চলবে।

সারাংশ

REST API গুলো মডার্ন ওয়েব অ্যাপ্লিকেশনগুলির জন্য অপরিহার্য। আশা করি এই টিউটোরিয়ালটি আপনাদের লারাভেলে REST API তৈরি করার ধারণা দিয়েছে। কিছু গুরুত্বপূর্ণ বিষয় যেগুলো আমরা দেখলাম:

✅ REST এর মৌলিক ধারণা
✅ লারাভেলে API রিসোর্স তৈরি করা
✅ রাউটিং সেটআপ করা ✅ ডাটাবেজ মাইগ্রেশন ও সিডিং
✅ রিসোর্স নেস্টিং ✅ মিড্লেয়ার ব্যবহার

এগুলো সব বুঝে নিলে আপনি সহজেই শক্তিশালী REST API তৈরি করতে পারবেন। কোডিং প্র্যাকটিস করে থাকুন এবং ধীরে ধীরে সব জটিল বিষয়গুলি বুঝতে পারবেন। অভিজ্ঞতা আসলে শেখার সেরা উপায়। শুভ কামনা!

--

--

Abu Sayed

Bangladeshi Full Stack Web Dev, Sys Admin & DevOps Engineer. Skills: Data analysis, SQL, Kubernetes. Python, PHP & Laravel. Me on: bd.linkedin.com/in/imabusayed