Gesponsert

ল্যারাভেলে REST API তৈরি এবং অথেনটিকেশন

0
21

ল্যারাভেলে কিভাবে সিম্পল অ্যাপ তৈরি করা যায় তা দেখেছি। এর আগে আমরা একটা সিম্পল নোট অ্যাপ তৈরি করেছি। এবার দেখব ঐ নোট গুলো কিভাবে REST API ব্যবহার করে এক্সেস করা যায়। এই লেখাটা পড়ার আগে ল্যারাভেলে পূর্ণাঙ্গ CRUD – নোট অ্যাপ লেখাটা পড়লে ভালো হবে। ঐখানে আমরা দেখেছি কিভাবে ফ্রন্টএন্ড থেকে পোস্ট তৈরি, আপডেট, ডিলেট ইত্যাদি করা যায়। আমরা এবার একই কাজ API এর মাধ্যমে করব। তার জন্য নতুন একটা ল্যারাভেল প্রজেক্ট তৈরি করে নিব।

composer create-project laravel/laravel note-api
cd note-api

এরপর আমরা Note নামে একটা মডেল তৈরি করব। মডেলের পাশা পাশি মাইগ্রেশন ফাইল এবং কন্ট্রোলার তৈরি করার জন্য এভাবে কমান্ড লিখবঃ

php artisan make:model Note -cmr

নোট ডেটাবেজ স্কিমা

database/migrations/…._create_notes_table.php ফাইল ওপেন করব। ডিফল্ট ভাবে ডেটাবেজ স্কিমায় ID এবং টাইমস্ট্যাপ যোগ থাকে। আমরা আরো দুইটা কলাম যোগ করব। title এবং note:

Schema::create('notes', function (Blueprint $table) {
           $table->id();
           $table->string('title');
           $table->longText('note');
           $table->timestamps();
       });

ডেটাবেজ মাইগ্রেশন

ডেটাবেজ স্কিমা তৈরির পর মাইগ্রেশন করে নিব। তাহলে ডেটাবেজে Note টেবিল তৈরি হবে। ডেটাবেজ সম্পর্কে বিস্তারিত জানা যাবে এই লেখায়। যদি আপনি ভিজুয়াল স্টুডিও কোড ব্যবহার করেন, SQLite Viewer এই এক্সটেনশনটা ব্যবহার করতে পারেন। এটি ব্যবহার করে SQLite ডেটাবেজ ভিজুয়ালি দেখা যাবে। এমনকি চাইলে ডেটাবেজ টেবিলে ডেটা যোগ করতে পারবেন।

php artisan migrate

আপনি চাইলে ফ্রন্টএন্ড থেকে কিভাবে নোট তৈরি, আপডেট এবং ডীলেট করতে হয়, তার জন্য এই লেখা দেখতে পারেন। যদিও এই লেখার জন্য ফ্রন্টেন্ড গুরুত্বপূর্ণ না।

ল্যারাভেলের আগের ভার্সনে ডিফল্ট ভাবে API যুক্ত থাকত। এখন ইন্সটল করতে হয়। তার জন্য নিচের কমান্ড লিখবঃ

php artisan install:api

আমাদেরকে ডেটাবেজ মাইগ্রেট করব কিনা, তা জিজ্ঞেস করবে। yes লিখে ডেটাবেজ মাইগ্রেট করে নিব।

আমরা দেখব routes ফোল্ডারে api.php ফাইল যুক্ত হয়েছে। এখানে আমরা API রুট গুলো লিখতে পারব। যেমন সব গুলো নোটের JSON রেসপন্স পাওয়ার জন্য এভাবে লিখতে পারিঃ

use App\Models\Note;

Route::get('/note', function (Request $request) {
    return Note::all();
});

এখন যদি ব্রাউজারে example.com/api/notes ভিজিট করি, তাহলে ডেটাবেজে থাকা সব গুলো নোট রিটার্ণ করবে। যদি কোন নোট না থাকে তাহলে একটা শূন্য এরে [] রিটার্ণ করবে।

আমরা যেমন Note এর জন্য কন্ট্রোলার তৈরি করে CURD অপারেশন যুক্ত করেছি, ঠিক তেমনি API এর ক্ষেত্রেও একটা কন্ট্রোলার তৈরি করতে পারি।

php artisan make:controller ApiNoteController --api

ফলে ওয়েব রুটের মত এক লাইনেই সব গুলো API রুট পেয়ে যাবোঃ

use App\Http\Controllers\ApiNoteController;

Route::resource('note', ApiNoteController::class);

ApiNoteController.php ফাইলে প্রথমে Note মডেল ইনক্লুড করে নিব use App\Models\Note; ব্যবহার ক্রে।

এরপর index মেথড এভাবে লিখবঃ

    public function index()
    {
        return Note::all();
    }

এখন যদি example.com/api/note ভিজিট করি, তাহলে আগের মতই সব গুলো নোটের JSON রেসপন্স পাবো।

একটা সিঙ্গেল আইটেম এর রেসপন্স পাওয়া

উপরে আমরা সব গুলো নোট রেসপন্স পেয়েছি। চাইলে নোটের আইডি ব্যবহার করে শুধু মাত্র একটা সিঙ্গেল নোটের রেসপন্স পেতে পারি। তার জন্য ApiNoteController.php ফাইলের show মেথড এভাবে লিখবঃ

    public function show(Note $note)
    {
        return $note;
    }

সিঙ্গেল নোট পাবো এভাবে example.com/api/note/1

ডেটাবেজে যদি নোট না থাকে, তাহলে আগে ডেটাবেজে নোট স্টোর করে করে এপর উপরের দুইটা মেথড আমরা চেক করতে পারি।

API ব্যবহার করে নোট নোট তৈরি

Note ক্লাসে fillable প্রোপার্টি যোগ করতে হবেঃ

class Note extends Model
{
    use HasFactory;
    protected $fillable = ['title', 'note'];
}

ApiNoteController.php ফাইলে store মেথড এভাবে লিখবঃ

    public function store(Request $request)
    {
        $data = $request->validate([
            'title' => 'required',
            'note' => 'required'
        ]);

        $note = Note::create($data);
        return  $note;
    }

নোট তৈরি করার সময় POST রিকোয়েস্টের মাধ্যমে API কল করতে হয়। তার জন্য আমরা Postman ব্যবহার করে দেখতে পারব। বিস্তারিত জানা যাবেঃ রেস্ট এপিআই টেস্ট করার জন্য পোস্টম্যান লেখা থেকে। Postman ওপেন করে একটা নতুন HTTP রিকোয়েস্ট ট্যাব খুলব। রিকোয়েস্ট টাইপ হিসেবে ডিফল্ট ভাবে GET থাকে। তা পরিবর্তন করে POST সিলেক্ট করব। এড্রেস হবে এমনঃ example.com/api/note

এছাড়া Headers ট্যাব থেকে Accept কি যুক্ত করতে হবে। যার ভ্যালু হবে application/json।

এখন যদি আমরা send বাটনে ক্লিক করি, তাহলে একটা এরর দিবে। মূলত title এবং note ফিল্ড না দেওয়ার কারণে। পোস্টম্যানে Body ট্যাব ওপেন করব।

এখানে রিকোয়েস্ট বডিতে আমরা raw ভ্যালু পাস করব। আর নিচে ভ্যালু ফিল্ডে JSON ডেটা পাস করব। যেমন নিচের ডেটা পাস করে দেখতে পারিঃ

{
    "title" : "This is an awesome note",
    "note" : "This is content of the note."
}

সব কিছু ঠিক থাকলে নোট ডেটাবেজে নোট স্টোর হবে। এবং নিচের মত করে ঐ নোটের ডেটা রিটার্ণ করবেঃ

{
  "id": 3,
  "title": "This is an awesome note",
  "note": "This is content of the note.",
  "created_at": "2024-09-04T07:05:35.000000Z",
  "updated_at": "2024-09-04T07:05:35.000000Z"
}

চাইলে ডেটাবেজ ব্রাউজ করে দেখতে পারি।

নোট আপডেট করা

নোট স্টোর করা এবং আপডেট করা অলমোস্ট একই রকম। তাই আমরা চাইলে store মেথড কপি করতে পারি।

 public function update(Request $request, Note $note)
    {
        $data = $request->validate([
            'title' => 'required',
            'note' => 'required'
        ]);

        $note->update($data);
        return  $note;
    }

আমরা শুধু $note = Note::create($data); এর পরিবর্তে $note->update($data); লিখেছি।

নোট আপডেট করতে হয় PUT রিকোয়েস্টের মাধ্যমে। আমরা চাইলে পোস্টম্যানে নতুন নোট তৈরি করার ট্যাবটি ডুপ্লিকেট করে POST এর পরিবর্তে PUT রিকোয়েস্ট ব্যবহার করতে পারিঃ

নোট আপডেট করার সময় নোটের ID দিতে হবে। তাই আমাদের রিকোয়েস্ট URL হবে এমনঃ example.com/api/note/{id}। এছাড়া পোস্ট রিকোয়েস্টের মত Headers ট্যাব থেকে Accept কি যুক্ত করতে হবে। যার ভ্যালু হবে application/json।

এখন যদি send বাটনে ক্লিক করি, তাহলে নোট আপডেট হবে এবং আমাদের আপডেটেড নোট রিটার্ণ করবে। নির্দিষ্ট নোট না থাকলে এরর দেখাবে।

নোট ডিলেট করা

ডিলিট করা সবচেয়ে সহজ। তার জন্য ApiNoteController.php এর destroy মেথড এভাবে লিখবঃ

    public function destroy(Note $note)
    {
        $note->delete();
        return ['message' => 'The note was deleted'];
    }

পোস্টম্যানে একটা নতুন ট্যাব খুলব। এড্রেস হবে এমন example.com/api/note/{id}। আর মেথড হবে DELETE। এরপর send বাটনে ক্লিক করলেই পোস্ট ডিলিট হয়ে যাবে।

এখানে খেয়াল রাখতে হবে যেন ঐ আইডির নোট থাকে। যদি না থাকে, তাহলে এরর দেখাবে।

অথেনটিকেশন – ল্যারাভেল স্যাংকটাম

উপরের স্টেপ গুলো ফলো করলে আমরা বুঝতে পারব যে যে কেউ চাইলে আমাদের প্রজেক্টের ডেটা এক্সেস করতে পারবে। ডেটা এড করার পাশা পাশি মডিফাই বা ডিলেটও করতে পারবে। এই সমস্যাসা সমাধানের জন্য ল্যারাভেল স্যাংকটাম।

প্রথমে আমরা ইউজার রেজিস্ট্রেশন, লগিন ও লগআউট ফাংশনালিটি নিয়ে কাজ করব। তার জন্য একটা কন্ট্রোলার তৈরি করে নেই। নাম দেই ApiAuthController.php। কমান্ড লাইন থেকে কন্ট্রোলারটি তৈরি করতে লিখিঃ

php artisan make:controller ApiAuthController  

API এর মাধ্যমে ইউজার ম্যানেজমেন্টের জন্য User মডেলে HasApiTokens ব্যবহার করতে হবে। তার জন্য use HasFactory, Notifiable; পরিবর্তন করে লিখবে হবে use HasApiTokens, HasFactory, Notifiable;। এবং HasApiTokens ইনক্লুড করে নিতে হবে। সম্পূর্ণ User মডেল হবে এমনঃ

<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
    protected $fillable = [
        'name',
        'email',
        'password',
    ];
    protected $hidden = [
        'password',
        'remember_token',
    ];
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}

API থেকে ইউজার রেজিস্ট্রেশন এবং অথেনটিকেশন

প্রথমে api.php ফাইলে একটা রুট তৈরি করে নেইঃ

Route::post('/register', [ApiAuthController::class, 'register']);

ApiAuthController.php ফাইলে register মেথড যোগ করি। এই রুট হচ্ছে একটা POST রিকোয়েস্টের রুট। সব কিছু ঠিক মত কাজ করছে কিনা, তার জন্য register মেথড থেকে সিম্পল একটা স্ট্রিং রিটার্ণ করিঃ

    public function register(Request $request){
    return "register";
}

পোস্টম্যানে গিয়ে একটা পোস্ট রিকোয়েস্ট করি example.com/api/register এড্রেসে।

Headers ট্যাব থেকে Accept কি যুক্ত করতে হবে। যার ভ্যালু হবে application/json। তা না হলে এরর দেখাবে। যদি register স্ট্রিং রিটার্ণ পাই, তাহলে বুঝতে পারব সব সুন্দর মত কাজ করছে। এবার register মেথড এভাবে লিখিঃ

    public function register(Request $request){
      $data = $request->validate([
        'name'=> 'required|max:255',
        'email'=> 'required|email|unique:users',
        'password' => 'required'
      ]);
    $user =  User::create($data);
    $token = $user->createToken($request->name);
    return [
        'user' => $user,
        'token' => $token->plainTextToken
    ];
    }

এখানে শুরুতে আমরা রিকোয়েস্ট ডেটা গুলো ভ্যালিডেট করে নিয়েছি। এরপর ঐ ভ্যালিডেটেড ডেটা ব্যবহার করে নতুন ইউজার তৈরি করেছি। এবং সদ্য তৈরি করা ইউজারকে একটা ভ্যারিয়েবলে রেখেছিঃ $user = User::create($data);

ওয়েব অ্যাপলিকেশনে ইউজার রেজিস্ট্রেশন এবং লগিন করার পর তা সেশনের মাধ্যমে ম্যানেজ করা হয়। সেশন থেকে আমরা বুঝতে পারি ইউজার লগিন করা অবস্থায় আছে কিনা। API তে তো আর সেশন নেই। আর এর বিকল্প হচ্ছে টোকেন। টোকেন দিয়ে বুঝতে পারি একটা ইউজার লগিন করা অবস্থায় রয়েছে কিনা। আর এই টোকেন ম্যানেজ করে ল্যারাভেল স্যাংক্টাম। ইজারকে একটা টোকেন জেনারেট করে দেয়। আর একটা টোকেন হ্যাস করে ডেটাবেজে সেভ করে রাখে। টোকেন তৈরি করার জন্য আমরা লিখেছি $token = $user->createToken($request->name);।

পরবর্তীতে এই ইউজার ইনফরমেশন এবং টোকেন রেসপন্স হিসেবে রিটার্ণ করেছি।

এবার example.com/api/register এন্ডপয়েন্টে আমরা পোস্ট রিকোয়েস্ট করব। Body ট্যাব থেকে raw ভ্যালু হিসেবে name, email এবং password দিতে হবেঃ

{
    "name" : "Umar",
    "email" : "[email protected]",
    "password" : "12345"
}
Suche
Kategorien
Mehr lesen
Tech
কম্পিউটার/ল্যাপটপ এর স্ক্রীন শেয়ার - Screen sharing (Bangla)
How to share your computer Screen. আমারা সচারচর কাওকে কোন কিছু শিখাতে গেলে বা ধরুন আপনি আপনার...
Von Nettumi 2026-09-25 17:16:57 0 360
Nulled
BIZREVIEW v2.6.0 - Business Review WordPress Plugin Free
BIZREVIEW v2.6.0 – Business Review WordPress Plugin Free Download. BIZREVIEW is the best...
Von Nettumi 2026-09-18 03:30:32 0 143
Nulled
মোবাইল হ্যাকারদের থেকে কীভাবে নিরাপদ রাখবেন? | Techtunes | টেকটিউনস
অ্যাপল মানুষকে ফিরিয়ে নিচ্ছে হাত ঘড়ির যুগে… অসামান্য প্রাযুক্তিক উৎকর্ষতায়! একটি Apple...
Von Nettumi 2026-09-21 05:27:37 0 35
Hacking Course
এই ফোনটি ঘড়ির মত হাতে পরা যাবে (মটোরোলার অদ্ভুত আবিষ্কার)
গত কয়েক বছর ধরে ফ্লিপ ও ফোল্ড ফোন ধীরে ধীরে জনপ্রিয়তা অর্জন করে চলেছে, মূলত সাধারণ চিরাচরিত...
Von Nettumi 2026-09-25 09:42:05 0 44
Nulled
Repair Box v1.2.8 Nulled - Repair Booking, Tracking and Workshop Management System PHP Script
Repair Box v1.2.8 Nulled – Repair Booking, Tracking and Workshop Management System PHP...
Von Nettumi 2026-09-17 18:26:13 0 41
‎ ‎ ‎
Nettumi https://nettumi.com