TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #87 805
📌 ساخت یک REST API سبک با PHP خالص

خیلی وقت‌ها برای یک فرم ساده، اپ موبایل کوچک یا integration داخلی، لازم نیست کل Laravel را بالا بیاریم. یک API سبک با PHP خالص می‌تونه هم سریع باشه، هم قابل دیپلوی روی هر هاستی.

در این پست، یه نمونه خیلی عملی می‌بینیم که شبیه مثال‌های سرور داخلی PHP در مستندات رسمی کار می‌کنه؛ فقط کمی مرتب‌تر و مدرن‌تر 👇

💡 ایده اصلی

– استفاده از PHP 8+ با type hint و strict_types.
– هندل‌کردن GET /tasks و POST /tasks برای یک TODO ساده.
– استفاده از json_encode / json_decode با application/json.
– جداسازی لاجیک در یک کلاس کوچک (بدون شلوغ‌کاری).

🔧 ساختار پیشنهادی

– یک فایل public/index.php
– یک کلاس ساده برای مدیریت داده‌ها (فعلاً in-memory، بعداً راحت می‌شه به DB وصل کرد)


<?php

declare(strict_types=1);

// public/index.php

header('Content-Type: application/json; charset=utf-8');

$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$uri = strtok($_SERVER['REQUEST_URI'] ?? '/', '?');

class TaskStore
{
private array $tasks = [];

public function all(): array
{
return array_values($this->tasks);
}

public function add(string $title): array
{
$id = uniqid('task_', true);
$task = [
'id' => $id,
'title' => $title,
];
$this->tasks[$id] = $task;
return $task;
}
}

$store = new TaskStore();

if ($uri === '/tasks' && $method === 'GET') {
echo json_encode($store->all(), JSON_UNESCAPED_UNICODE);
exit;
}

if ($uri === '/tasks' && $method === 'POST') {
$input = json_decode(file_get_contents('php://input'), true) ?? [];

if (!isset($input['title']) || !is_string($input['title'])) {
http_response_code(422);
echo json_encode(['error' => 'title is required']);
exit;
}

$task = $store->add(trim($input['title']));

http_response_code(201);
echo json_encode($task, JSON_UNESCAPED_UNICODE);
exit;
}

http_response_code(404);
echo json_encode(['error' => 'Not Found']);


🚀 اجرا روی لوکال

با سرور داخلی PHP (مطابق داکیومنت رسمی):

php -S localhost:8000 -t public


حالا:
– با curl یا Postman روی /tasks تست کن.
– بعداً خیلی راحت می‌شه این ساختار رو به یک لایه Repository و اتصال به MySQL یا PostgreSQL گسترش داد.

🔥 چند نکته کاربردی

– همیشه Content-Type درست برای JSON ست کن تا client ها راحت‌تر parse کنن.
– برای پروژه واقعی، لاگ‌گرفتن و error handling مرکزی (مثلاً با یک middleware ساده) خیلی کمک می‌کنه.
– اگر این سبک رو دوست داشتی، نگاه‌کردن به سورس micro-frameworkهایی مثل Slim PHP ایده‌های خوبی برای routing و middleware می‌ده.

امروز همین نمونه کوچک رو روی سیستم خودت بالا بیار، کمی باهاش بازی کن و بعد شروع کن به اضافه‌کردن featureهای کوچیک 😉

🔖 #PHP #پی_اچ_پی #PHP #REST_API #Backend #Web #Tutorial

👤 Developix

💎 Channel: @DevelopixPHP
  • ❤ 1
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 &rlm;LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →