كيفية كتابة REST API بلغة PHP في 30 دقيقة: للمبتدئين
إنشاء REST API خاص بك هو خطوة مهمة لأي مطور ويب. يتيح API لتطبيقك التواصل مع الخدمات الأخرى، التطبيقات المحمولة، أو الواجهة الأمامية. في هذه المقالة، سنشرح كيفية كتابة REST API بسيط ولكنه متكامل بلغة PHP النقية في 30 دقيقة فقط. ستتعلم كيفية معالجة طلبات HTTP، العمل مع JSON، وتوصيل قاعدة البيانات. لا أطر عمل — فقط PHP نقي وأمثلة واضحة.
ما هو REST API ولماذا هو مطلوب؟
REST (نقل الحالة التمثيلية) هو نمط معماري لإنشاء خدمات الويب. API المبني على مبادئ REST يستخدم طرق HTTP القياسية للعمل مع الموارد:
- GET — الحصول على البيانات (مثل قائمة المستخدمين);
- POST — إنشاء مورد جديد;
- PUT — تحديث مورد موجود;
- DELETE — حذف مورد.
في تطوير الويب الحديث، يُستخدم REST API في كل مكان: من التطبيقات المحمولة إلى الخدمات المصغرة. بتعلم كيفية إنشائه بلغة PHP، ستتمكن من دمج مشاريعك بسرعة مع أي عملاء.
الخطوة 1: إعداد هيكل المشروع
قبل كتابة الكود، أنشئ هيكل ملفات بسيط. سيتطلب API الخاص بنا بضعة ملفات فقط:
index.php— نقطة الدخول التي ستتعامل مع جميع الطلبات;.htaccess— لإعادة توجيه جميع الطلبات إلى index.php (إذا كنت تستخدم Apache);config.php— إعدادات الاتصال بقاعدة البيانات (اختياري).
أنشئ ملف .htaccess في المجلد الجذر للمشروع:
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php [QSA,L]يقوم هذا الكود بإعادة توجيه جميع الطلبات التي لا تشير إلى ملفات موجودة إلى index.php. الآن سيتعامل API الخاص بنا مع أي عناوين URL، مثل /api/users أو /api/users/1.
الخطوة 2: إنشاء الموجه ومعالجة الطلبات
افتح ملف index.php واكتب منطق التوجيه الأساسي. سنقوم بتحديد طريقة HTTP وعنوان URL، ثم استدعاء الدوال المناسبة.
<?phpheader("Content-Type: application/json; charset=UTF-8");header("Access-Control-Allow-Origin: *");header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");header("Access-Control-Allow-Headers: Content-Type, Authorization");
$method = $_SERVER['REQUEST_METHOD'];$request = explode('/', trim($_SERVER['PATH_INFO'] ?? '/', '/'));
// أبسط موجهswitch ($request[0] ?? '') { case 'users': handleUsers($method, $request); break; default: http_response_code(404); echo json_encode(["message" => "Route not found"]); break;}
function handleUsers($method, $request) { $id = $request[1] ?? null; switch ($method) { case 'GET': if ($id) { // الحصول على مستخدم واحد echo json_encode(["message" => "Get user with id $id"]); } else { // الحصول على جميع المستخدمين echo json_encode(["message" => "Get all users"]); } break; case 'POST': $input = json_decode(file_get_contents("php://input"), true); echo json_encode(["message" => "Create user", "data" => $input]); break; case 'PUT': if ($id) { $input = json_decode(file_get_contents("php://input"), true); echo json_encode(["message" => "Update user with id $id", "data" => $input]); } else { http_response_code(400); echo json_encode(["message" => "ID is requ