RESTful (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিসগুলোর জন্য ডিজাইন করা হয়েছে। এটি মূলত HTTP প্রটোকলের উপর ভিত্তি করে এবং ক্লায়েন্ট-সার্ভার আর্কিটেকচার ফলো করে, যেখানে রিসোর্সের প্রতি ক্লায়েন্টের অনুরোধ HTTP মেথড যেমন GET, POST, PUT, DELETE ব্যবহার করে সার্ভারের কাছে পাঠানো হয়।
Zend Framework (বর্তমানে Laminas) একটি শক্তিশালী ফ্রেমওয়ার্ক, যা RESTful ওয়েব সেবা তৈরি করতে সাহায্য করে। এটি RESTful API তৈরির জন্য প্রয়োজনীয় সব কনফিগারেশন এবং ফিচার সরবরাহ করে।
RESTful কনসেপ্ট
RESTful কনসেপ্টে মূলত ৬টি প্রিন্সিপাল আছে:
- Statelessness: প্রতিটি HTTP রিকোয়েস্ট সম্পূর্ণ তথ্য সহ পাঠানো হয়, এবং সার্ভারকে কোনো পূর্ববর্তী রিকোয়েস্টের অবস্থা মনে রাখতে হয় না।
- Uniform Interface: সব রিসোর্সের জন্য একটি নির্দিষ্ট ইন্টারফেস ব্যবহার করা হয়। সাধারণত URL পাথ এবং HTTP মেথড দিয়ে রিসোর্সের ইন্টারফেস নির্ধারণ করা হয়।
- Client-Server Architecture: ক্লায়েন্ট এবং সার্ভারের মধ্যে সংযোগ পরিষ্কারভাবে আলাদা থাকে, যেখানে ক্লায়েন্ট শুধুমাত্র UI বা ইউজার ইন্টারফেস নিয়ন্ত্রণ করে এবং সার্ভার ডেটা প্রসেসিং এবং সংরক্ষণ করে।
- Cacheable: প্রতিটি রিকোয়েস্টকে ক্যাশ করা যেতে পারে যাতে রেসপন্সের গতি বাড়ানো যায়।
- Layered System: সার্ভার বিভিন্ন লেয়ার নিয়ে গঠিত হতে পারে (যেমন, প্রক্সি সার্ভার, লোড ব্যালান্সার), কিন্তু ক্লায়েন্টের জন্য এটি অদৃশ্য থাকে।
- Code on Demand (Optional): সার্ভার ক্লায়েন্টকে কিছু কোড পাঠাতে পারে যা রান করা যায় (যেমন, JavaScript), কিন্তু এটি ঐচ্ছিক।
RESTful API তৈরির জন্য Zend Framework এর ব্যবহার
Zend Framework RESTful API তৈরির জন্য প্রয়োজনীয় সরঞ্জাম এবং কনফিগারেশন প্রদান করে। নিচে Zend Framework (Laminas) এ একটি সিম্পল RESTful API কিভাবে তৈরি করা যায় তার একটি ধাপ-ধাপে গাইড দেওয়া হলো।
১. Zend Framework এ RESTful API সেটআপ করা
Zend Framework (Laminas) এ RESTful API তৈরি করার জন্য আমরা প্রথমে Composer ব্যবহার করে একটি নতুন অ্যাপ্লিকেশন তৈরি করব।
১.১ Composer দিয়ে Zend Framework অ্যাপ্লিকেশন তৈরি করা
composer create-project laminas/laminas-mvc-skeleton my-rest-api
এই কমান্ডটি একটি নতুন Zend Framework অ্যাপ্লিকেশন তৈরি করবে।
২. RESTful কন্ট্রোলার তৈরি করা
RESTful API কন্ট্রোলার সাধারণত HTTP মেথড যেমন GET, POST, PUT, DELETE এর মাধ্যমে রিসোর্সের সাথে ইন্টারঅ্যাক্ট করে। কন্ট্রোলার তৈরি করার জন্য আপনাকে AbstractActionController ক্লাসের মাধ্যমে কন্ট্রোলার তৈরি করতে হবে।
২.১ কন্ট্রোলার তৈরি করা
ফোল্ডার স্ট্রাকচার:
module/Api/src/Controller/ProductController.php
ProductController.php:
<?php
namespace Api\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\JsonModel;
class ProductController extends AbstractActionController
{
public function indexAction()
{
// সকল পণ্যের ডাটা রিটার্ন করুন (GET)
$products = [
['id' => 1, 'name' => 'Product 1', 'price' => 100],
['id' => 2, 'name' => 'Product 2', 'price' => 150],
];
return new JsonModel($products);
}
public function createAction()
{
// নতুন পণ্য তৈরি করুন (POST)
$data = $this->getRequest()->getPost();
$product = [
'id' => rand(3, 1000),
'name' => $data['name'],
'price' => $data['price'],
];
return new JsonModel(['status' => 'success', 'product' => $product]);
}
public function updateAction()
{
// পণ্য আপডেট করুন (PUT)
$id = (int) $this->params()->fromRoute('id', 0);
$data = $this->getRequest()->getPost();
$updatedProduct = [
'id' => $id,
'name' => $data['name'],
'price' => $data['price'],
];
return new JsonModel(['status' => 'success', 'product' => $updatedProduct]);
}
public function deleteAction()
{
// পণ্য মুছে ফেলুন (DELETE)
$id = (int) $this->params()->fromRoute('id', 0);
return new JsonModel(['status' => 'success', 'message' => 'Product deleted']);
}
}
এখানে, ProductController ৪টি একশন (অ্যাকশন) নির্ধারণ করেছে:
- indexAction (GET): সকল পণ্য তালিকা ফেরত দেয়।
- createAction (POST): একটি নতুন পণ্য তৈরি করে।
- updateAction (PUT): একটি পণ্য আপডেট করে।
- deleteAction (DELETE): একটি পণ্য ডিলিট করে।
৩. রাউট কনফিগারেশন
এখন আমাদের তৈরি করা কন্ট্রোলার এবং অ্যাকশনগুলো রাউটিং কনফিগারেশনে যুক্ত করতে হবে। এ জন্য module.config.php ফাইলটি আপডেট করতে হবে।
module.config.php:
return [
'controllers' => [
'invokables' => [
'Api\Controller\Product' => 'Api\Controller\ProductController',
],
],
'router' => [
'routes' => [
'api-product' => [
'type' => 'segment',
'options' => [
'route' => '/api/products[/:id]',
'defaults' => [
'controller' => 'Api\Controller\Product',
],
],
'may_terminate' => true,
'child_routes' => [
'get' => [
'type' => 'Literal',
'options' => [
'route' => '',
'defaults' => [
'action' => 'index',
],
],
],
'post' => [
'type' => 'Literal',
'options' => [
'route' => '/create',
'defaults' => [
'action' => 'create',
],
],
],
'put' => [
'type' => 'Literal',
'options' => [
'route' => '/update/:id',
'defaults' => [
'action' => 'update',
],
],
],
'delete' => [
'type' => 'Literal',
'options' => [
'route' => '/delete/:id',
'defaults' => [
'action' => 'delete',
],
],
],
],
],
],
],
'view_manager' => [
'template_path_stack' => [
'api' => __DIR__ . '/../view',
],
],
];
এখানে আমরা api-product নামে একটি রাউট তৈরি করেছি, যেখানে GET, POST, PUT, এবং DELETE রিকোয়েস্টের জন্য উপযুক্ত অ্যাকশন নির্ধারণ করা হয়েছে।
৪. API টেস্টিং
এখন, আপনি আপনার API টেস্ট করতে পারবেন। উদাহরণস্বরূপ, Postman বা অন্য কোনো API টেস্টিং টুল ব্যবহার করে আপনি নিচের URL-এ রিকোয়েস্ট পাঠাতে পারেন:
- GET
/api/products: সকল পণ্যের তথ্য - POST
/api/products/create: নতুন পণ্য তৈরি করা - PUT
/api/products/update/1: পণ্য আপডেট করা - DELETE
/api/products/delete/1: পণ্য ডিলিট করা
সারাংশ
Zend Framework (Laminas) ব্যবহার করে RESTful API তৈরি করা খুবই সহজ। এই প্রক্রিয়ায়, আপনি কাস্টম কন্ট্রোলার তৈরি করেন, যেখানে বিভিন্ন HTTP মেথড (GET, POST, PUT, DELETE) দিয়ে রিসোর্সের সাথে ইন্টারঅ্যাক্ট করা হয়। রাউট কনফিগারেশন ও কন্ট্রোলারের মাধ্যমে আপনি API-এর রিকোয়েস্ট এবং রেসপন্স প্রসেসিং নিয়ন্ত্রণ করতে পারেন। RESTful API ডেভেলপমেন্টে Zend Framework এর সাপোর্ট অত্যন্ত শক্তিশালী, যা আপনাকে একটি মডুলার এবং সহজবোধ্য API তৈরি করতে সাহায্য করে।
Read more