ساخت API برای دیسلایک‌ها

ساخت API برای دیسلایک‌ها با PHP

ساخت API برای دیسلایک‌ها با PHP

در دنیای وب مدرن، تعامل کاربران با محتوا فراتر از لایک کردن ساده است. دیسلایک کردن نیز به عنوان یک مکانیزم بازخورد مهم، به پلتفرم‌ها کمک می‌کند تا کیفیت محتوا را بهبود بخشند و نیازهای کاربران را بهتر درک کنند. این مقاله به بررسی نحوه ساخت یک API قدرتمند و کارآمد برای مدیریت دیسلایک‌ها با استفاده از PHP می‌پردازد. ما این API را به گونه‌ای طراحی خواهیم کرد که قابلیت‌های مختلفی از جمله ثبت دیسلایک، لغو دیسلایک، شمارش دیسلایک‌ها و بررسی وضعیت دیسلایک یک کاربر خاص را ارائه دهد.

مقدمه و نیازمندی‌ها

قبل از شروع، باید نیازمندی‌های پروژه را مشخص کنیم. API ما باید:

  • امن باشد و از دسترسی‌های غیرمجاز جلوگیری کند.
  • مقیاس‌پذیر باشد تا بتواند حجم بالایی از درخواست‌ها را مدیریت کند.
  • کارآمد باشد و با کمترین تأخیر پاسخ دهد.
  • دارای مستندات واضح و قابل فهم باشد.

برای پیاده‌سازی این API، به موارد زیر نیاز داریم:

  • یک سرور وب با PHP فعال (مانند Apache یا Nginx)
  • یک پایگاه داده (مانند MySQL یا PostgreSQL)
  • یک فریم‌ورک PHP (اختیاری، اما توصیه می‌شود – Laravel, Symfony, CodeIgniter)
  • دانش کافی در زمینه PHP، SQL و مفاهیم API

طراحی پایگاه داده

برای ذخیره اطلاعات مربوط به دیسلایک‌ها، یک جدول در پایگاه داده ایجاد می‌کنیم. این جدول شامل ستون‌های زیر خواهد بود:

  • id: شناسه یکتا برای هر دیسلایک (INT, AUTO_INCREMENT, PRIMARY KEY)
  • user_id: شناسه کاربری که دیسلایک کرده است (INT)
  • content_id: شناسه محتوایی که دیسلایک شده است (INT)
  • created_at: زمان ثبت دیسلایک (TIMESTAMP)

یک مثال از دستور SQL برای ایجاد این جدول:

CREATE TABLE dislikes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    content_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

پیاده‌سازی API با PHP

حال به پیاده‌سازی API با PHP می‌پردازیم. ما از یک رویکرد RESTful برای طراحی API استفاده خواهیم کرد. API ما شامل endpointهای زیر خواهد بود:

  • POST /dislikes: ثبت دیسلایک
  • DELETE /dislikes/{id}: لغو دیسلایک
  • GET /dislikes/count/{content_id}: شمارش دیسلایک‌های یک محتوا
  • GET /dislikes/user/{user_id}/content/{content_id}: بررسی وضعیت دیسلایک یک کاربر برای یک محتوا

1. ثبت دیسلایک (POST /dislikes)

این endpoint برای ثبت دیسلایک یک کاربر برای یک محتوا استفاده می‌شود. درخواست باید شامل user_id و content_id باشد. قبل از ثبت دیسلایک، باید بررسی کنیم که آیا کاربر قبلاً این محتوا را دیسلایک کرده است یا خیر. اگر دیسلایک قبلی وجود داشته باشد، باید آن را لغو کنیم و دیسلایک جدید را ثبت کنیم.

prepare("SELECT id FROM dislikes WHERE user_id = ? AND content_id = ?");
$stmt->execute([$user_id, $content_id]);
$existing_dislike = $stmt->fetch(PDO::FETCH_ASSOC);

// لغو دیسلایک قبلی در صورت وجود
if ($existing_dislike) {
    $stmt = $db->prepare("DELETE FROM dislikes WHERE id = ?");
    $stmt->execute([$existing_dislike['id']]);
}

// ثبت دیسلایک جدید
$stmt = $db->prepare("INSERT INTO dislikes (user_id, content_id) VALUES (?, ?)");
$stmt->execute([$user_id, $content_id]);

// بازگرداندن پاسخ موفقیت
http_response_code(201);
echo json_encode(['message' => 'Dislike registered successfully']);
?>

2. لغو دیسلایک (DELETE /dislikes/{id})

این endpoint برای لغو دیسلایک با شناسه مشخص استفاده می‌شود. درخواست باید شامل شناسه دیسلایک (id) باشد. قبل از لغو دیسلایک، باید بررسی کنیم که آیا دیسلایک مورد نظر وجود دارد و کاربر فعلی اجازه لغو آن را دارد یا خیر.

prepare("SELECT id FROM dislikes WHERE id = ?");
$stmt->execute([$id]);
$dislike = $stmt->fetch(PDO::FETCH_ASSOC);

// اگر دیسلایک وجود نداشته باشد، خطا برگردانید
if (!$dislike) {
    http_response_code(404);
    echo json_encode(['message' => 'Dislike not found']);
    exit;
}

// لغو دیسلایک
$stmt = $db->prepare("DELETE FROM dislikes WHERE id = ?");
$stmt->execute([$id]);

// بازگرداندن پاسخ موفقیت
http_response_code(200);
echo json_encode(['message' => 'Dislike deleted successfully']);
?>

3. شمارش دیسلایک‌ها (GET /dislikes/count/{content_id})

این endpoint برای شمارش تعداد دیسلایک‌های یک محتوا استفاده می‌شود. درخواست باید شامل شناسه محتوا (content_id) باشد.

prepare("SELECT COUNT(*) AS count FROM dislikes WHERE content_id = ?");
$stmt->execute([$content_id]);
$count = $stmt->fetch(PDO::FETCH_ASSOC)['count'];

// بازگرداندن پاسخ
http_response_code(200);
echo json_encode(['count' => $count]);
?>

4. بررسی وضعیت دیسلایک (GET /dislikes/user/{user_id}/content/{content_id})

این endpoint برای بررسی اینکه آیا یک کاربر خاص یک محتوا را دیسلایک کرده است یا خیر، استفاده می‌شود. درخواست باید شامل شناسه کاربر (user_id) و شناسه محتوا (content_id) باشد.

prepare("SELECT id FROM dislikes WHERE user_id = ? AND content_id = ?");
$stmt->execute([$user_id, $content_id]);
$dislike = $stmt->fetch(PDO::FETCH_ASSOC);

// بازگرداندن پاسخ
http_response_code(200);
echo json_encode(['disliked' => (bool)$dislike]);
?>

امنیت API

امنیت API بسیار مهم است. برای افزایش امنیت API، می‌توانید از روش‌های زیر استفاده کنید:

  • احراز هویت (Authentication): از روش‌های احراز هویت مانند توکن‌های JWT برای تأیید هویت کاربران استفاده کنید.
  • مجوز (Authorization): مطمئن شوید که کاربران فقط به منابعی دسترسی دارند که مجاز به آن هستند.
  • اعتبارسنجی ورودی (Input Validation): تمام ورودی‌ها را اعتبارسنجی کنید تا از حملات تزریق SQL و سایر آسیب‌پذیری‌ها جلوگیری کنید.
  • محدود کردن نرخ درخواست (Rate Limiting): تعداد درخواست‌هایی که یک کاربر می‌تواند در یک بازه زمانی مشخص ارسال کند را محدود کنید.
  • استفاده از HTTPS: تمام ارتباطات را از طریق HTTPS رمزگذاری کنید.

بهینه‌سازی و مقیاس‌پذیری

برای بهینه‌سازی و مقیاس‌پذیری API، می‌توانید از روش‌های زیر استفاده کنید:

  • Caching: از caching برای ذخیره نتایج پرکاربرد استفاده کنید تا بار روی پایگاه داده کاهش یابد.
  • Indexing: ستون‌های مورد استفاده در جستجوها را index کنید تا سرعت جستجو افزایش یابد.
  • Load Balancing: از load balancing برای توزیع بار روی چندین سرور استفاده کنید.
  • Database Sharding: پایگاه داده را به چندین shard تقسیم کنید تا ظرفیت ذخیره‌سازی و پردازش افزایش یابد.

نتیجه‌گیری

در این مقاله، نحوه ساخت یک API قدرتمند و کارآمد برای مدیریت دیسلایک‌ها با استفاده از PHP را بررسی کردیم. با پیاده‌سازی این API، می‌توانید به کاربران خود امکان دهید تا بازخورد خود را در مورد محتوا به اشتراک بگذارند و کیفیت محتوای پلتفرم خود را بهبود بخشید. به یاد داشته باشید که امنیت و مقیاس‌پذیری API از اهمیت بالایی برخوردار هستند و باید در طراحی و پیاده‌سازی آن به آن‌ها توجه ویژه‌ای داشته باشید.