ميكروسيرفيسات PHP: دليل المبتدئين لعام 2024

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

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

ابدأ الدورة

ميكروسيرفيسات PHP: من أين تبدأ وكيف لا تصاب بالجنون

\n\n

هل سبق لك أن نظرت إلى تطبيق PHP ضخم (Monolith) تجاوز 200,000 سطر من الكود، وشعرت بأن قلبك يتقلص؟ commit واحد وكل شيء ينهار. خطأ واحد في وحدة سلة التسوق يؤدي إلى انهيار الموقع بأكمله. هل هذا مألوف؟ مرحبًا بك في نادي الناجين من التطبيقات المتجانسة.

\n\n

لكن هناك خبر سار: ميكروسيرفيسات PHP ليست علم الصواريخ. إنها مجرد مجموعة من التطبيقات الصغيرة المستقلة التي تتواصل مع بعضها البعض عبر HTTP أو عبر قوائم الانتظار. ونعم، PHP مثالية لهذا الغرض. لا تصدقني؟ Laravel وSymfony وحتى PHP الخام تتعامل بشكل ممتاز مع دور الميكروسيرفيسات.

\n\n

في هذا المقال، سأعرض لكم بنية الميكروسيرفيسات في PHP مع أمثلة عملية من الكود. ستتعرف على من أين تبدأ، وما هي الأدوات التي تختارها، وكيف تتجنب الأخطاء الشائعة. هيا بنا!

\n\n

ما هي ميكروسيرفيسات PHP بلغة بسيطة

\n\n

تخيل مطعم بيتزا. التطبيق المتجانس (Monolith) هو عندما يقوم طباخ واحد بكل شيء: يعجن العجين، يقطع النقانق، يخبز، يغلف، يستقبل الطلبات ويغسل الأطباق. إذا مرض الطباخ، المطعم مغلق. الميكروسيرفيسات هي عندما يكون لديك طباخ منفصل للعجين، وآخر للحشوة، وآخر للفرن، وساعي منفصل. كل منهم يعمل بشكل مستقل، وإذا مرض "طباخ العجين"، يستمر الباقون في العمل.

\n\n

في عالم PHP، يبدو هذا كالتالي:

\n\n
    \n
  • خدمة المستخدمين — التسجيل، تسجيل الدخول، الملفات الشخصية
  • \n
  • خدمة الطلبات — الإنشاء، الدفع، الحالات
  • \n
  • خدمة الإشعارات — البريد الإلكتروني، الرسائل النصية، الإشعارات الفورية
  • \n
  • API Gateway — نقطة دخول موحدة للعملاء
  • \n
\n\n

كل خدمة هي تطبيق PHP منفصل له قاعدة بياناته الخاصة، ومستودعه الخاص، ومنطقه الخاص. وكل هذا يعمل معًا لتشكيل بنية ميكروسيرفيسات PHP.

\n\n

متى يجب الانتقال إلى الميكروسيرفيسات؟

\n\n

لنكن صادقين: الميكروسيرفيسات ليست حلاً سحريًا. إذا كان لديك 3000 مستخدم و10 صفحات — انسَ الأمر. أنت بحاجة إلى تطبيق متجانس. ولكن إذا:

\n\n
    \n
  • فريق التطوير نما إلى 5 أشخاص أو أكثر
  • \n
  • تنشر كل تحديث صغير بدعوات وتضرعات
  • \n
  • قاعدة بيانات واحدة أصبحت عنق الزجاجة
  • \n
  • أجزاء مختلفة من التطبيق تتطلب تقنيات مختلفة (مثل Elasticsearch للبحث وPostgreSQL للطلبات)
  • \n
\n\n

...عندها ميكروسيرفيسات PHP هي خيارك الأمثل.

\n\n

من أين تبدأ: ميكروسيرفيس أساسي في PHP

\n\n

لنبدأ بشيء بسيط. سننشئ ميكروسيرفيسًا يعرض قائمة بالمستخدمين. سيكون هذا ميكروسيرفيس PHP REST API.

\n\n

الخطوة 1: هيكل المشروع

\n\n
user-service/\n├── public/\n│   └── index.php\n├── src/\n│   ├── Controllers/\n│   │   └── UserController.php\n│   ├── Models/\n│   │   └── User.php\n│   └── Services/\n│       └── UserService.php\n├── config/\n│   └── database.php\n├── composer.json\n└── .env
\n\n

الخطوة 2: نقطة الدخول (index.php)

\n\n
<?php\n// public/index.php\nrequire_once __DIR__ . '/../vendor/autoload.php';\n\nuse Symfony\\Component\\Dotenv\\Dotenv;\nuse App\\Controllers\\UserController;\n\n$dotenv = new Dotenv();\n$dotenv->load(__DIR__ . '/../.env');\n\n$uri = $_SERVER['REQUEST_URI'];\n$method = $_SERVER['REQUEST_METHOD'];\n\n// موجه بسيط\nif ($uri === '/api/users' && $method === 'GET') {\n    $controller = new UserController();\n    echo json_encode($controller->index());\n} elseif (preg_match('/\\/api\\/users\\/(\\d+)/', $uri, $matches) && $method === 'GET') {\n    $controller = new UserController();\n    echo json_encode($controller->show($matches[1]));\n} else {\n    http_response_code(404);\n    echo json_encode(['error' => 'Not found']);\n}
\n\n

الخطوة 3: المتحكم (Controller)

\n\n
<?php\n// src/Controllers/UserController.php\nnamespace App\\Controllers;\n\nuse App\\Services\\UserService;\n\nclass UserController\n{\n                

المدونات

توصيات الكتب