آموزش ساخت REST API در PHP به صورت اصولی و استاندارد (گوگل فرندلی)
مقدمه؛ چرا باید طراحی REST API استاندارد را یاد بگیریم؟
امروزه با گسترش اپلیکیشنهای موبایل و فریمورکهای مدرن فرانتاند مانند React و Vue، نیاز به بکاندهای منعطف و قدرتمند بیش از پیش احساس میشود. REST API یا وبسرویسهای مبتنی بر معماری REST، استاندارد طلایی تبادل داده در دنیای وب هستند. در این آموزش عملی، قصد داریم با استفاده از زبان محبوب PHP، یک REST API استاندارد برای مدیریت کاربران بسازیم که از تمامی اصول بهینهسازی و امنیت پیشنهادی گوگل پیروی کند.
معماری REST چیست و چه قواعدی دارد؟
معماری REST (Representational State Transfer) مجموعهای از اصول طراحی است که به کلاینت و سرور اجازه میدهد بدون وابستگی شدید به یکدیگر، با هم ارتباط برقرار کنند. در این معماری، هر موجودیت (مانند کاربر یا مقاله) به عنوان یک Resource در نظر گرفته میشود که با یک آدرس منحصربهفرد (URI) و با استفاده از متدهای استاندارد HTTP مدیریت میشود:
- GET: برای دریافت دادهها
- POST: برای ایجاد داده جدید
- PUT: برای بروزرسانی کامل داده موجود
- DELETE: برای حذف داده
تنظیم هدرهای پاسخ (Response Headers) در PHP
اولین گام در طراحی یک API با کیفیت، مشخص کردن نوع محتوای خروجی و دسترسیهای مجاز (CORS) است. یک API استاندارد همواره پاسخ خود را در قالب JSON ارسال میکند. کد زیر نحوه تعریف این هدرها را در ابتدای اسکریپت PHP نشان میدهد:
// هدرهای استاندارد برای پاسخهای JSON و اجازه دسترسی خارج از دامنه (CORS)
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
اتصال به دیتابیس با استفاده از PDO
برای ایجاد ارتباطی امن و بهینه با دیتابیس در PHP، همواره توصیه میشود از PDO (PHP Data Objects) استفاده کنید تا در برابر حملات تزریق SQL (SQL Injection) مقاوم باشید. کلاس زیر یک الگو برای مدیریت اتصال است:
class Database {
private $host = "localhost";
private $db_name = "my_api_db";
private $username = "root";
private $password = "";
public $conn;
public function getConnection(){
$this->conn = null;
try {
$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
$this->conn->exec("set names utf8");
} catch(PDOException $exception) {
echo "خطا در اتصال به دیتابیس: " . $exception->getMessage();
}
return $this->conn;
}
}
مدیریت درخواستها و متدهای مختلف HTTP
برای پاسخ به متدهای گوناگون، ابتدا باید متد ارسالی توسط کلاینت را با استفاده از متغیر سراسری $_SERVER['REQUEST_METHOD'] تشخیص دهیم. در ادامه، یک نمونه ساده از پیادهسازی متدهای GET و POST را مشاهده میکنید:
include_once 'Database.php';
$database = new Database();
$db = $database->getConnection();
$request_method = $_SERVER["REQUEST_METHOD"];
switch($request_method) {
case 'GET':
// فرآیند دریافت دادهها
getUsers($db);
break;
case 'POST':
// دریافت دادههای خام ارسالی (JSON payload)
$data = json_decode(file_get_contents("php://input"));
if(!empty($data->name) && !empty($data->email)) {
createUser($db, $data);
} else {
http_response_code(400); // Bad Request
echo json_encode(array("message" => "دادههای ارسالی ناقص هستند."));
}
break;
default:
http_response_code(405); // Method Not Allowed
echo json_encode(array("message" => "متد مورد نظر پشتیبانی نمیشود."));
break;
}
function getUsers($db) {
// کوئری دریافت کاربران و ارسال پاسخ با کد وضعیت 200
http_response_code(200);
echo json_encode(array("status" => "success", "data" => []));
}
function createUser($db, $data) {
// کوئری درج کاربر جدید و ارسال پاسخ با کد وضعیت 210 یا 201 (Created)
http_response_code(201);
echo json_encode(array("status" => "success", "message" => "کاربر با موفقیت ایجاد شد."));
}
استانداردهای مهم گوگل برای توسعه REST API
برای اینکه API توسعه یافته شما در رتبهبندیهای فنی و امنیتی گوگل نمره قبولی دریافت کند، سه قاعده زیر را رعایت کنید:
- استفاده درست از کدهای وضعیت HTTP: کدهای سری 200 به معنای موفقیت، سری 400 نشاندهنده خطای سمت کاربر و سری 500 نمایانگر خطای سرور هستند.
- طراحی ساختار پاسخ یکپارچه: همیشه پاسخهای خود را در یک فرمت استاندارد (مثلاً داشتن فیلدهای status، message و data) کپسولهسازی کنید.
- امنسازی اتصالات (HTTPS): هیچگاه دادههای حساس کلاینت را بر بستر ناامن HTTP انتقال ندهید.
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید