ویژگی تصویر

ساخت API در PHP — راهنمای کامل و عملی

  /  PHP   /  ساخت API در PHP
بنر تبلیغاتی الف
آموزش PHP

ایجاد یک API با PHP یکی از مهارت‌های اساسی برای توسعه‌دهندگان وب است. این مقاله گام‌به‌گام مفاهیم کلیدی، الگوهای کاربردی، نمونه کد واقعی و نکات امنیتی را پوشش می‌دهد تا بتوانید یک API ساده، امن و قابل توسعه بسازید.

اصول اولیه و تصمیم‌گیری‌ها

  • نوع API: RESTful رایج‌ترین انتخاب است؛ ساده، مبتنی بر منابع و استفاده از متدهای HTTP (GET, POST, PUT, DELETE).
  • فرمت داده: معمولاً JSON برای تعامل بین کلاینت و سرور استفاده می‌شود.
  • کتابخانه‌ها: می‌توانید از فریم‌ورک‌هایی مثل Laravel یا Slim استفاده کنید یا با PHP خالص (vanilla) و composer کار کنید.
  • دیتابیس: استفاده از PDO به دلیل امنیت (prepared statements) و قابلیت انتقال بین دیتابیس‌ها توصیه می‌شود.

معماری پیشنهادی

یک ساختار ساده شامل فایل‌های زیر مفید است:

  • index.php — نقطه ورود و روتینگ
  • db.php — اتصال به دیتابیس با PDO
  • controllers/ — منطق منابع (مثلاً UserController.php)
  • middlewares/ — احراز هویت، لاگ، کنترل CORS

نمونه: یک API ساده برای مدیریت کاربران (CRUD)

// index.php (simplified)
'Not found']); exit;
}
$id = $uri[2] ?? null;
switch ($method) {
    case 'GET':
        if ($id) {
            // get single user
            $stmt = $pdo->prepare("SELECT id,name,email FROM users WHERE id = ?");
            $stmt->execute([$id]);
            $user = $stmt->fetch(PDO::FETCH_ASSOC);
            echo json_encode($user ?: []);
        } else {
            // get all users
            $stmt = $pdo->query("SELECT id,name,email FROM users");
            echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
        }
        break;
    case 'POST':
        $data = json_decode(file_get_contents('php://input'), true);
        $stmt = $pdo->prepare("INSERT INTO users (name,email) VALUES (?,?)");
        $stmt->execute([$data['name'],$data['email']]);
        echo json_encode(['id'=>$pdo->lastInsertId()]);
        break;
    case 'PUT':
        $data = json_decode(file_get_contents('php://input'), true);
        $stmt = $pdo->prepare("UPDATE users SET name=?, email=? WHERE id=?");
        $stmt->execute([$data['name'],$data['email'],$id]);
        echo json_encode(['updated'=> $stmt->rowCount()]);
        break;
    case 'DELETE':
        $stmt = $pdo->prepare("DELETE FROM users WHERE id=?");
        $stmt->execute([$id]);
        echo json_encode(['deleted'=>$stmt->rowCount()]);
        break;
    default:
        http_response_code(405); echo json_encode(['error'=>'Method not allowed']);
}
?>

توضیح: این کد نقطه ورودی ساده‌ای است که براساس مسیر و متد HTTP عملیات CRUD روی جدول users انجام می‌دهد. ورودی‌ها از بدنه درخواست به‌صورت JSON خوانده می‌شوند. استفاده از prepare و اجرای پارامترها از حملات SQL injection جلوگیری می‌کند.

// db.php
 PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['error'=>'Database connection failed']);
    exit;
}
?>

توضیح: این فایل اتصال امن به دیتابیس را برقرار می‌کند و خطاها را به‌صورت استثناء مدیریت می‌کند. charset=utf8mb4 برای پشتیبانی از یونیکد کامل ضروری است.

بهبودها و نکات امنیتی

  • احراز هویت: استفاده از توکن‌های JWT یا OAuth برای محدود کردن دسترسی.
  • اعتبارسنجی ورودی‌ها: هم در سمت کلاینت و هم سرور. هر ورودی را بررسی و پاکسازی کنید.
  • محدودیت نرخ (Rate limiting) و لاگینگ برای جلوگیری از حملات Brute-force.
  • فعال کردن HTTPS و تنظیم هدرهای امنیتی مانند Content-Security-Policy و X-Content-Type-Options.

نمونه پیاده‌سازی JWT (تأیید توکن)

// auth.php (very simplified, using firebase/php-jwt recommended)
'No token']); exit;
}
list($type, $token) = explode(' ', $headers['Authorization']);
try {
    $payload = JWT::decode($token, $secretKey, ['HS256']);
    // $payload now contains user data like user id
} catch (Exception $e) {
    http_response_code(401); echo json_encode(['error'=>'Invalid token']); exit;
}
?>

توضیح: این کد از کتابخانه محبوب firebase/php-jwt استفاده می‌کند. توکن را از هدر Authorization استخراج و با کلید مخفی و الگوریتم HS256 اعتبارسنجی می‌کند. در صورت خطا پاسخ 401 بازگردانده می‌شود.

مثال‌های استفاده و موارد کاربرد

  • اپلیکیشن‌های موبایل که نیاز به یک لایه backend برای ذخیره و واکشی داده دارند.
  • وب‌سرویس برای SPA (Single Page Application) مثل React یا Vue.
  • ادغام بین سیستم‌ها: ارائه API برای اتصال سرویس‌های داخلی یا سرویس‌های شخص ثالث.

عملکرد و بهینه‌سازی

برای APIهای پر تراکنش به موارد زیر توجه کنید:

  • کشینگ (Redis یا Memcached) برای کاهش بار دیتابیس.
  • پگینیشن و انتخاب فیلدها (select specific fields) به‌جای بازگرداندن همه ستون‌ها.
  • فشرده‌سازی پاسخ‌ها با GZIP و استفاده از HTTP/2 در صورت امکان.
  • پیاده‌سازی health checks و مانیتورینگ (Prometheus, Grafana).

نمونه headerها و CORS

// cors.php (include at top of API)

توضیح: برای دسترسی کلاینت‌های سمت مرورگر باید هدرهای CORS تنظیم شوند. در بالا فقط منبع مشخصی مجاز شده است؛ در توسعه محلی می‌توانید به طور موقت “*” استفاده کنید اما در تولید اینکار خطرناک است.

مقایسه روش‌ها

روشمزایامعایب
PHP خالص + PDOسبک، کنترل کامل، مناسب برای پروژه‌های کوچکنیازمند پیاده‌سازی دستی روتینگ و middleware
فریم‌ورک (Laravel)قابلیت بالا، امنیت، اکوسیستم بزرگپیچیده‌تر و سنگین‌تر

نتیجه‌گیری و توصیه‌های عملی

برای شروع سریع از ساختار خالص و PDO استفاده کنید. سپس به‌مرور با نیازهای پروژه به سمت فریم‌ورک‌ها یا سرویس‌های میکروسرویس حرکت کنید. همیشه روی امنیت، بررسی ورودی‌ها و مانیتورینگ تمرکز داشته باشید. تست‌های اتوماتیک (واحد و انتها به انتها) را برای APIهای حیاتی پیاده کنید.

اگر نیاز به نمونه پروژه کامل یا راهنمای نصب Composer،‌ تست JWT یا پیاده‌سازی Rate Limiting دارید، می‌توانم نمونه‌های آماده و گام‌به‌گام بیشتری ارائه دهم.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: