ساخت API برای لیست محصولات با PHP
در دنیای امروز، توسعه وب به سمت معماریهای مبتنی بر API پیش میرود. APIها به عنوان رابطی بین سیستمهای مختلف عمل میکنند و امکان تبادل داده را فراهم میآورند. یکی از کاربردهای رایج APIها، ارائه لیست محصولات برای فروشگاههای آنلاین، اپلیکیشنهای موبایل و سایر سیستمهای مرتبط است. این مقاله به بررسی گام به گام ساخت یک API ساده برای لیست محصولات با استفاده از PHP میپردازد.
پیشنیازها
برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:
- یک سرور وب با PHP نصب شده (مانند Apache یا Nginx)
- یک پایگاه داده (مانند MySQL یا PostgreSQL)
- دانش پایه PHP و SQL
- یک ویرایشگر کد (مانند VS Code، Sublime Text یا PHPStorm)
طراحی پایگاه داده
ابتدا باید یک جدول برای ذخیره اطلاعات محصولات در پایگاه داده ایجاد کنیم. جدول `products` میتواند شامل ستونهای زیر باشد:
- `id`: شناسه یکتای محصول (integer, primary key, auto-increment)
- `name`: نام محصول (varchar)
- `description`: توضیحات محصول (text)
- `price`: قیمت محصول (decimal)
- `image_url`: آدرس تصویر محصول (varchar)
- `category`: دسته بندی محصول (varchar)
یک مثال از دستور SQL برای ایجاد این جدول:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL,
image_url VARCHAR(255),
category VARCHAR(255)
);
اتصال به پایگاه داده
در PHP، برای اتصال به پایگاه داده میتوان از PDO (PHP Data Objects) استفاده کرد. PDO یک لایه انتزاعی است که امکان اتصال به انواع مختلف پایگاه داده را فراهم میکند. در اینجا یک مثال از اتصال به پایگاه داده MySQL با استفاده از PDO آورده شده است:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
exit;
}
?>
به جای مقادیر `your_database_name`، `your_username` و `your_password`، اطلاعات مربوط به پایگاه داده خود را وارد کنید.
ساخت API
اکنون میتوانیم API را برای ارائه لیست محصولات ایجاد کنیم. API ما یک نقطه پایانی (endpoint) واحد خواهد داشت که با ارسال یک درخواست GET، لیست محصولات را برمیگرداند. ما از فرمت JSON برای تبادل داده استفاده خواهیم کرد.
یک فایل PHP به نام `products_api.php` ایجاد کنید و کد زیر را در آن قرار دهید:
prepare("SELECT * FROM products");
$stmt->execute();
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($products) {
echo json_encode($products);
} else {
http_response_code(404);
echo json_encode(['message' => 'No products found']);
}
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['message' => 'Internal server error', 'error' => $e->getMessage()]);
}
?>
در این کد:
- `header(‘Content-Type: application/json’);` هدر Content-Type را برای پاسخ JSON تنظیم میکند.
- `require_once ‘db_connection.php’;` فایل اتصال به پایگاه داده را فراخوانی میکند.
- `$stmt = $pdo->prepare(“SELECT * FROM products”);` یک پرس و جو SQL برای انتخاب تمام محصولات از جدول `products` آماده میکند.
- `$stmt->execute();` پرس و جو را اجرا میکند.
- `$products = $stmt->fetchAll(PDO::FETCH_ASSOC);` نتایج را به صورت آرایهای از آرایههای انجمنی (associative arrays) دریافت میکند.
- `json_encode($products);` آرایه محصولات را به فرمت JSON تبدیل میکند.
- `http_response_code(404);` در صورت عدم وجود محصولات، کد وضعیت HTTP را به 404 (Not Found) تنظیم میکند.
- `http_response_code(500);` در صورت بروز خطا، کد وضعیت HTTP را به 500 (Internal Server Error) تنظیم میکند.
فایل `db_connection.php` باید شامل کد اتصال به پایگاه داده باشد که در بخش قبل توضیح داده شد.
تست API
برای تست API، میتوانید از یک مرورگر وب، ابزار خط فرمان مانند `curl` یا یک ابزار تست API مانند Postman استفاده کنید. به سادگی به آدرس `products_api.php` در مرورگر خود بروید یا یک درخواست GET به آن آدرس ارسال کنید. اگر همه چیز به درستی پیکربندی شده باشد، باید یک آرایه JSON حاوی لیست محصولات را دریافت کنید.
مثال استفاده از `curl`:
curl http://localhost/products_api.php
افزودن قابلیتهای بیشتر
API ساخته شده در این آموزش بسیار ساده است. میتوان قابلیتهای بیشتری به آن اضافه کرد، از جمله:
- **فیلتر کردن محصولات:** امکان فیلتر کردن محصولات بر اساس دسته بندی، قیمت یا سایر معیارها.
- **صفحهبندی (Pagination):** ارائه محصولات در صفحات مختلف برای بهبود عملکرد و تجربه کاربری.
- **مرتبسازی (Sorting):** امکان مرتبسازی محصولات بر اساس نام، قیمت یا سایر معیارها.
- **جستجو (Search):** امکان جستجوی محصولات بر اساس کلمات کلیدی.
- **احراز هویت (Authentication):** محافظت از API با استفاده از احراز هویت برای جلوگیری از دسترسی غیرمجاز.
- **اعتبارسنجی (Validation):** اعتبارسنجی دادههای ورودی برای جلوگیری از حملات تزریقی (injection attacks) و سایر آسیبپذیریها.
نمونهای از افزودن فیلتر کردن بر اساس دسته بندی
برای افزودن قابلیت فیلتر کردن بر اساس دسته بندی، کد API را به صورت زیر تغییر دهید:
prepare("SELECT * FROM products WHERE category = ?");
$stmt->execute([$category]);
} else {
$stmt = $pdo->prepare("SELECT * FROM products");
$stmt->execute();
}
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($products) {
echo json_encode($products);
} else {
http_response_code(404);
echo json_encode(['message' => 'No products found']);
}
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['message' => 'Internal server error', 'error' => $e->getMessage()]);
}
?>
در این کد، یک پارامتر `category` از طریق متد GET دریافت میشود. اگر این پارامتر وجود داشته باشد، یک پرس و جو SQL با شرط `WHERE category = ?` اجرا میشود. در غیر این صورت، تمام محصولات بدون فیلتر انتخاب میشوند.
برای تست این قابلیت، میتوانید به آدرس `products_api.php?category=your_category` بروید. به جای `your_category`، نام دسته بندی مورد نظر خود را وارد کنید.
نکات امنیتی
هنگام ساخت API، رعایت نکات امنیتی بسیار مهم است. برخی از نکات مهم عبارتند از:
- **استفاده از PDO برای جلوگیری از حملات تزریقی SQL:** PDO به طور خودکار دادههای ورودی را پاکسازی میکند و از حملات تزریقی SQL جلوگیری میکند.
- **اعتبارسنجی دادههای ورودی:** دادههای ورودی را قبل از استفاده در پرس و جوهای SQL یا سایر عملیات اعتبارسنجی کنید.
- **استفاده از احراز هویت:** از احراز هویت برای محافظت از API در برابر دسترسی غیرمجاز استفاده کنید.
- **استفاده از HTTPS:** از HTTPS برای رمزگذاری ارتباط بین کلاینت و سرور استفاده کنید.
- **محدود کردن نرخ درخواستها (Rate Limiting):** برای جلوگیری از حملات DDoS، نرخ درخواستها را محدود کنید.
نتیجهگیری
در این مقاله، نحوه ساخت یک API ساده برای لیست محصولات با استفاده از PHP را بررسی کردیم. با استفاده از این آموزش، میتوانید یک API پایه برای ارائه لیست محصولات به سایر سیستمها ایجاد کنید. با افزودن قابلیتهای بیشتر و رعایت نکات امنیتی، میتوانید یک API قدرتمند و امن برای نیازهای خود ایجاد کنید.
