آموزش RESTful API در PHP
APIهای RESTful سبک، مقیاسپذیر و بهراحتی قابل مصرف توسط کلاینتهای مختلف (وب، موبایل، سرویسها) هستند. در زبان PHP، ساخت RESTful API یکی از مهارتهای پایه برای توسعهدهندگان وب محسوب میشود. این مقاله به صورت عملی و مرحلهبهمرحله نحوه طراحی، پیادهسازی و بهینهسازی یک RESTful API ساده با PHP را توضیح میدهد.
مبانی و اصول REST
- منابع (Resources): هر چیزی که API ارائه میدهد (مثل users، products).
- URLها: باید توصیفی و منطبق با منابع باشند (/api/users).
- متدهای HTTP: GET برای خواندن، POST برای ایجاد، PUT/PATCH برای بهروزرسانی، DELETE برای حذف.
- وضعیتها و خطاها: استفاده مناسب از HTTP status codes (200، 201، 400، 401، 404، 500).
- بیحالت بودن: هر درخواست باید تمام اطلاعات لازم را داشته باشد (stateless).
ساختار پروژه پیشنهادی
- public/index.php — نقطه ورود و روتینگ ساده
- src/Database.php — اتصال به دیتابیس با PDO
- src/Controllers/UserController.php — منطق CRUD
- config/config.php — تنظیمات پایه
نمونه روتینگ ساده و نقطه ورود
getUser($id);
else $controller->getUsers();
break;
case 'POST':
$controller->createUser();
break;
case 'PUT':
case 'PATCH':
$controller->updateUser($id);
break;
case 'DELETE':
$controller->deleteUser($id);
break;
default:
http_response_code(405);
echo json_encode(['error' => 'Method Not Allowed']);
}
} else {
http_response_code(404);
echo json_encode(['error' => 'Not Found']);
}
?>توضیح: این فایل نقش روتینگ بسیار ساده را دارد؛ مسیرهای /api/users و /api/users/{id} را تشخیص میدهد و بر اساس متد HTTP کدام تابع کنترلر را فراخوانی کند. در پروژههای واقعی بهتر است از فریمورکهای مینیروتر یا مسیرساز پیشرفته استفاده کنید.
دیتابیس و دسترسی ایمن با PDO
PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
$this->pdo = new PDO($dsn, $user, $pass, $options);
}
public static function getInstance() {
if (!self::$instance) self::$instance = new Database();
return self::$instance->pdo;
}
}
?>توضیح: این کلاس یک Singleton برای اتصال PDO فراهم میکند و تنظیمات خطا و حالت fetch امن را تعیین میکند. استفاده از prepared statements در کنترلرها، از حملات SQL Injection جلوگیری میکند.
نمونه کنترلر: CRUD برای کاربران
db = Database::getInstance();
}
public function getUsers() {
$stmt = $this->db->query('SELECT id, name, email FROM users');
$users = $stmt->fetchAll();
echo json_encode($users);
}
public function getUser($id) {
$stmt = $this->db->prepare('SELECT id, name, email FROM users WHERE id = ?');
$stmt->execute([$id]);
$user = $stmt->fetch();
if ($user) echo json_encode($user);
else { http_response_code(404); echo json_encode(['error' => 'User not found']); }
}
public function createUser() {
$data = json_decode(file_get_contents('php://input'), true);
if (empty($data['name']) || empty($data['email'])) {
http_response_code(400);
echo json_encode(['error' => 'Invalid input']);
return;
}
$stmt = $this->db->prepare('INSERT INTO users (name, email) VALUES (?, ?)');
$stmt->execute([$data['name'], $data['email']]);
http_response_code(201);
echo json_encode(['id' => $this->db->lastInsertId()]);
}
public function updateUser($id) {
$data = json_decode(file_get_contents('php://input'), true);
$stmt = $this->db->prepare('UPDATE users SET name = ?, email = ? WHERE id = ?');
$stmt->execute([$data['name'] ?? null, $data['email'] ?? null, $id]);
echo json_encode(['updated' => $stmt->rowCount()]);
}
public function deleteUser($id) {
$stmt = $this->db->prepare('DELETE FROM users WHERE id = ?');
$stmt->execute([$id]);
echo json_encode(['deleted' => $stmt->rowCount()]);
}
}
?>توضیح: کنترلر بالا عملیات پایه CRUD را با استفاده از prepared statements انجام میدهد. دریافت ورودی از php://input و decode کردن JSON، الگوی استاندارد برای APIهای RESTful است. در عمل لازم است اعتبارسنجی ورودیها و مدیریت خطاها تقویت شود.
بهینهسازی، امنیت و بهترین شیوهها
- استفاده از HTTPS برای رمزنگاری ترافیک.
- احراز هویت: توکنمحور (مثلاً JWT) یا OAuth برای کنترل دسترسی.
- Rate limiting و throttling برای جلوگیری از سوءاستفاده.
- اعتبارسنجی و نرمالسازی ورودیها قبل از ذخیره در DB.
- تنظیم صحیح هِدرهای CORS و Content-Type: application/json.
- لاگبرداری و مانیتورینگ درخواستها و خطاها.
نمونه وضعیتهای HTTP — مرجع سریع
| کد | معنی |
|---|---|
| 200 | OK — درخواست موفق |
| 201 | Created — منبع جدید ساخته شد |
| 400 | Bad Request — ورودی نامعتبر |
| 401 | Unauthorized — احراز هویت لازم |
| 404 | Not Found — منبع موجود نیست |
| 405 | Method Not Allowed — متد پشتیبانی نمیشود |
| 500 | Internal Server Error — خطای سمت سرور |
نتیجهگیری و راهکارهای پیشرفته
پیادهسازی یک RESTful API در PHP از پایه ساده است اما رسیدن به سطح تولیدی نیازمند توجه به امنیت، مانیتورینگ و طراحی صحیح است. برای پروژههای بزرگتر از فریمورکهایی مانند Laravel یا Slim استفاده کنید که روتینگ، میدلورها، احراز هویت و تستپذیری را سادهتر میکنند. همچنین مستندسازی API با ابزارهایی مثل OpenAPI/Swagger و تست با Postman و automated tests را فراموش نکنید.
با رعایت اصول REST، استفاده از PDO، مدیریت هدرها و وضعیتها و اضافه کردن احراز هویت و rate limiting میتوانید APIهایی ایمن و مقیاسپذیر با PHP بسازید.
آیا این مطلب برای شما مفید بود ؟



