كيفية كتابة REST API بلغة PHP في 30 دقيقة: دليل عملي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا REST API بلغة PHP سريع وبسيط

\n\n

REST (Representational State Transfer) هو نمط معماري أصبح المعيار لإنشاء خدمات الويب. يخشى العديد من المطورين المبتدئين من تنفيذ API، معتبرين أنها مهمة صعبة. في الواقع، يمكن كتابة REST API كامل بلغة PHP في 30 دقيقة فقط إذا اتبعت الهيكل الصحيح.

\n\n

في هذا الدليل، سنقوم بإنشاء API بسيط ولكنه عملي لإدارة قائمة المهام (To-Do List). ستتعلم كيفية التعامل مع طرق HTTP (GET, POST, PUT, DELETE)، والعمل مع JSON، وبناء التوجيه. جميع أمثلة الكود جاهزة للتشغيل.

\n\n

ما ستحصل عليه بعد القراءة:

\n
    \n
  • REST API عامل بلغة PHP النقية بدون أطر عمل
  • \n
  • فهم مبادئ الهندسة المعمارية RESTful
  • \n
  • هيكل جاهز لتوسيع نطاق المشروع
  • \n
\n\n

الخطوة 1: إعداد هيكل المشروع وقاعدة البيانات

\n\n

للبدء، سنقوم بإنشاء هيكل مجلدات بسيط. سنحتاج إلى ملف PHP واحد للتوجيه (index.php) وملف إعدادات قاعدة البيانات (config.php).

\n\n

هيكل المشروع

\n
rest-api-todo/\n│\n├── index.php        (الموجه الرئيسي)\n├── config.php       (الاتصال بقاعدة البيانات)\n└── .htaccess        (إعداد عناوين URL الصديقة)
\n\n

إنشاء قاعدة بيانات MySQL

\n

نفذ استعلام SQL هذا في phpMyAdmin أو عبر وحدة التحكم:

\n
CREATE DATABASE todo_api;\n\nUSE todo_api;\n\nCREATE TABLE tasks (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    title VARCHAR(255) NOT NULL,\n    completed BOOLEAN DEFAULT FALSE,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\nINSERT INTO tasks (title) VALUES \n('تعلم PHP'), \n('كتابة REST API'), \n('نشر المقال');
\n\n

ملف config.php

\n
<?php\n// config.php\nheader('Content-Type: application/json');\nheader('Access-Control-Allow-Origin: *');\nheader('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');\nheader('Access-Control-Allow-Headers: Content-Type');\n\n$host = 'localhost';\n$dbname = 'todo_api';\n$username = 'root';\n$password = '';\n\ntry {\n    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);\n    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n} catch(PDOException $e) {\n    echo json_encode(['error' => 'خطأ في الاتصال بقاعدة البيانات: ' . $e->getMessage()]);\n    exit;\n}\n?>
\n\n

الخطوة 2: إنشاء نقطة دخول واحدة (الموجه)

\n\n

في ملف index.php، سنقوم بتنفيذ التوجيه. سيتعامل مع عناوين URL ويعيد توجيه الطلبات إلى الوظائف المناسبة.

\n\n

ملف index.php (الكود الكامل)

\n
<?php\nrequire_once 'config.php';\n\n$method = $_SERVER['REQUEST_METHOD'];\n$request = explode('/', trim($_SERVER['PATH_INFO'] ?? '/', '/'));\n\n// تحديد معرف المهمة إذا تم تمريره\n$id = isset($request[0]) && is_numeric($request[0]) ? (int)$request[0] : null;\n\n// معالجة طرق HTTP المختلفة\nswitch($method) {\n    case 'GET':\n        if ($id) {\n            getTask($pdo, $id);\n        } else {\n            getTasks($pdo);\n        }\n        break;\n        \n    case 'POST':\n        createTask($pdo);\n        break;\n        \n    case 'PUT':\n        if ($id) {\n            updateTask($pdo, $id);\n        } else {\n            http_response_code(400);\n            echo json_encode(['error' => 'لم يتم تحديد معرف المهمة']);\n        }\n        break;\n        \n    case 'DELETE':\n        if ($id) {\n            deleteTask($pdo, $id);\n        } else {\n            http_response_code(400);\n            echo json_encode(['error' => 'لم يتم تحديد معرف المهمة']);\n        }\n        break;\n        \n    default:\n        http_response_code(405);\n        echo json_encode(['error' => 'الطريقة غير مدعومة']);\n}\n\n// --- تنفيذ الوظائف ---\n\nfunction getTasks($pdo) {\n    $stmt = $pdo->query("SELECT * FROM tasks ORDER BY created_a                

المدونات

توصيات الكتب