كيفية كتابة REST API بلغة PHP في 30 دقيقة
إنشاء REST API خاص بك هو أحد المهارات الأساسية لمطور backend الحديث. يعتقد العديد من المبتدئين أن هذا يتطلب أطر عمل ثقيلة مثل Laravel أو Symfony. في الواقع، يمكن كتابة REST API أساسي بلغة PHP الخالصة في غضون نصف ساعة حرفيًا. في هذه المقالة، سنشرح عملية إنشاء خدمة RESTful خطوة بخطوة، والتي يمكن استخدامها فورًا في مشاريع حقيقية — بدءًا من تطبيقات الهاتف المحمول وصولاً إلى المواقع ذات الصفحة الواحدة.
لن نستخدم أي مكتبات خارجية. سيتم كتابة كل الكود بلغة PHP الخالصة (Vanilla PHP). ستتعلم كيفية معالجة طلبات HTTP، والعمل مع JSON، وتنظيم التوجيه (routing)، وإرجاع حالات HTTP الصحيحة. هيا بنا!
1. هيكل المشروع والتجهيز
قبل كتابة الكود، دعنا ننشئ هيكل ملفات بسيط. بالنسبة لـ API الخاص بنا، سنحتاج فقط إلى بضعة ملفات:
index.php— نقطة الدخول، والتي ستقوم بمعالجة جميع الطلبات؛.htaccess— لإعادة توجيه جميع الطلبات إلى index.php (إذا كنت تستخدم Apache)؛config.php— ملف إعدادات الاتصال بقاعدة البيانات (اختياري).
قم بإنشاء مجلد للمشروع، على سبيل المثال، my-rest-api، وضع هذه الملفات فيه.
إعداد ملف .htaccess
للتأكد من أن جميع الطلبات تصل إلى السكريبت الرئيسي لدينا، قم بإنشاء ملف .htaccess في جذر المشروع:
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php [QSA,L]يقوم هذا الكود بإعادة توجيه جميع الطلبات التي لا تؤدي إلى ملفات أو مجلدات حقيقية إلى index.php. المعامل QSA يحافظ على سلسلة الاستعلام (query string).
2. التوجيه (Routing) ومعالجة الطلبات
الآن دعنا نكتب الملف الرئيسي — index.php. سيقوم هذا الملف باستقبال الطلب، وتحديد طريقة HTTP (GET, POST, PUT, DELETE) والمسار، ثم استدعاء المعالج المناسب.
التوجيه الأساسي
لنبدأ بمثال بسيط. سننشئ مصفوفة من المسارات (routes) ودالة لمعالجتها:
<?phpheader('Content-Type: application/json');header('Access-Control-Allow-Origin: *');header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');header('Access-Control-Allow-Headers: Content-Type');
$method = $_SERVER['REQUEST_METHOD'];$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// إزالة الشرطة المائلة في النهاية$path = rtrim($path, '/');
// توجيه بسيطswitch (true) { case $path === '/api/users' && $method === 'GET': getUsers(); break; case $path === '/api/users' && $method === 'POST': createUser(); break; case preg_match('/^\\/api\\/users\\/(\\d+)$/', $path, $matches) && $method === 'GET': getUser($matches[1]); break; default: http_response_code(404); echo json_encode(['error' => 'Route not found']); break;}
function getUsers() { // بيانات وهمية (Stub) echo json_encode(['users' => ['Alice', 'Bob', 'Charlie']]);}
function getUser($id) { echo json_encode(['user' => ['id' => $id, 'name' => 'User ' . $id]]);}
function createUser() { $input = json_decode(file_get_contents('php://input'), true); echo json_encode(['message' => 'User created', 'data' => $input]);}?>لاحظ بعض النقاط المهمة:
- نقوم بتعيين الترويسة
Content-Type: application/json— جميع الاستجابات ستكون بتنسيق JSON. - ترويسات CORS تسمح بالطلبات من أي نطاق (للتطوير).
- يتم قراءة نص طلب POST/PUT من خلال
php://input.
3. العمل مع قاعدة البيانات
نادرًا ما يعمل API حقيقي بالبيانات الوهمية. دعنا نضيف اتصالاً بـ MySQL باستخدام PDO. قم بإنشاء ملف config.php:
<?phpdefine('DB_HOST', 'localhost');define(
```