كيفية كتابة REST API على PHP في 30 دقيقة: دليل خطوة بخطوة

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

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

ابدأ الدورة
```html

مقدمة: لماذا تحتاج REST API على PHP؟

REST API (Representational State Transfer) هو نمط معماري يسمح للتطبيقات المختلفة بالتواصل مع بعضها البعض عبر HTTP. اليوم، لا يمكن لأي خدمة ويب حديثة الاستغناء عن API: تطبيقات الهاتف المحمول، واجهات SPA الأمامية، والتكامل مع أنظمة الدفع - كل هذا يتطلب واجهة سريعة ومفهومة لتبادل البيانات.

لا يزال PHP واحدًا من أكثر اللغات شيوعًا للخادم الخلفي. يمكنك كتابة REST API كامل بلغة PHP النقية دون أطر عمل ضخمة - وهذا لن يستغرق منك أكثر من 30 دقيقة. في هذه المقالة، سنقوم بتحليل مثال عملي مع عمليات CRUD (إنشاء، قراءة، تحديث، حذف) لإدارة قائمة المهام (To-Do).

1. إعداد البيئة وهيكل المشروع

للعمل ستحتاج إلى:

  • خادم محلي (Open Server, XAMPP, MAMP أو خادم PHP المدمج)
  • PHP الإصدار 7.4 أو أعلى
  • محرر أكواد (VS Code, PhpStorm)

أنشئ مجلدًا جذريًا باسم rest-api-php وداخله الملفات التالية:

rest-api-php/
├── index.php       (نقطة الدخول، الموجه)
├── config.php      (إعدادات قاعدة البيانات)
├── api/
│   ├── tasks.php   (CRUD للمهام)
│   └── helpers.php (دوال مساعدة)
└── .htaccess       (إعادة توجيه الطلبات إلى index.php)

1.1. إعداد .htaccess لعناوين URL جميلة

لتوجيه جميع الطلبات إلى نقطة دخول واحدة، أنشئ ملف .htaccess في الجذر:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

إذا كنت تستخدم خادم PHP المدمج، فقط قم بتشغيله من مجلد المشروع: php -S localhost:8000.

2. إنشاء الموجه وAPI الأساسي

افتح index.php - هذا هو المعالج الرئيسي لدينا. سيقوم بتحليل HTTP method وURI واستدعاء الدوال المناسبة.

2.1. index.php - نقطة الدخول

<?php
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

require_once 'config.php';
require_once 'api/helpers.php';

$method = $_SERVER['REQUEST_METHOD'];
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri = rtrim($uri, '/');

// توجيه بسيط
if ($uri === '/api/tasks') {
    require_once 'api/tasks.php';
    handleTasks($method);
} elseif (preg_match('/^\\/api\\/tasks\\/(\\d+)$/', $uri, $matches)) {
    require_once 'api/tasks.php';
    handleTask($method, (int)$matches[1]);
} else {
    sendResponse(['error' => 'Endpoint not found'], 404);
}
?>

نقوم بمعالجة مسارين: /api/tasks (قائمة/إنشاء) و /api/tasks/{id} (مهمة محددة).

2.2. helpers.php - دوال مساعدة

<?php
function sendResponse($data, $status = 200) {
    http_response_code($status);
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    exit;
}

function getJsonInput() {
    $input = file_get_contents('php://input');
    return json_decode($input, true) ?? [];
}
?>

3. العمل مع قاعدة البيانات وعمليات CRUD

لنقم بإنشاء جدول بسيط tasks في MySQL:

CREATE TABLE tasks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    status ENUM('pending', 'completed') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ملف config.php:

<?php
$host = 'localhost';
$dbname = 'rest_api_db';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO:
```                

المدونات

توصيات الكتب