مقدمة: API ليس سحرًا، بل أداة عملية
\nعندما يتحول موقع PHP الخاص بك من صفحة ثابتة إلى كيان يتواصل مع العالم الخارجي — مثل بوتات Telegram، بوابات الدفع، أو تطبيق جوال خاص بك — ستواجه حتمًا مفهوم API (واجهة برمجة التطبيقات). إنه ببساطة عقد: "إذا أرسلت لي طلبًا بهذا التنسيق، سأعيد لك البيانات". اليوم، في ساحة PHP، هناك ثلاثة لاعبين رئيسيين: REST الكلاسيكي، GraphQL المرن، وgRPC الجريء. أيهما تختار؟ دعنا نكتشف ذلك من خلال أمثلة حية.
\nهذه المقالة موجهة لمن يجيدون البرمجة بلغة PHP ويريدون توسيع آفاقهم. لن نكتفي بنسخ الوثائق، بل سننظر إلى كل بروتوكول بعين المطور الذي يحل مشكلة حقيقية.
\n\nREST API في PHP: الكلاسيكية المجربة
\nREST (نقل الحالة التمثيلية) ليس بروتوكولًا، بل أسلوب معماري. يستخدم طرق HTTP (GET، POST، PUT، DELETE) للتعامل مع الموارد. إذا سبق لك كتابة file_get_contents('https://api.example.com/users')، فقد تعاملت مع REST بالفعل.
لماذا يظل REST هو الملك؟
\n- \n
- البساطة: أي عميل HTTP يمكنه التعامل معه. \n
- التخزين المؤقت: يمكن تخزين طلبات GET مؤقتًا على مستوى HTTP. \n
- الدعم الواسع: من curl إلى المكتبات المتخصصة. \n
مثال لعميل REST في PHP باستخدام Guzzle
\nمكتبة Guzzle هي المعيار الفعلي لطلبات HTTP في PHP. قم بتثبيتها عبر Composer: composer require guzzlehttp/guzzle.
<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client([\n 'base_uri' => 'https://jsonplaceholder.typicode.com/',\n 'timeout' => 5.0,\n]);\n\n// طلب GET\n$response = $client->get('posts/1');\n$post = json_decode($response->getBody(), true);\necho "عنوان المقال: " . $post['title'] . PHP_EOL;\n\n// طلب POST\n$response = $client->post('posts', [\n 'json' => [\n 'title' => 'مقال جديد',\n 'body' => 'نص المقال',\n 'userId' => 1\n ]\n]);\necho "تم إنشاء مقال برقم ID: " . json_decode($response->getBody(), true)['id'];\n?>\nماذا فعلنا؟ أرسلنا ببساطة طلبات HTTP. REST لا يتطلب مكتبة خاصة — يمكنك حتى استخدام file_get_contents() مع السياق، لكن Guzzle يوفر معالجة مريحة للأخطاء، والوسائط الوسيطة، والنقل التدفقي.
متى لا يكون REST الخيار الأفضل؟
\nإذا كنت بحاجة إلى الحصول على بيانات مترابطة (مثل المقال + الكاتب + التعليقات)، فإن REST سيجبرك على إجراء عدة طلبات. هنا يظهر GraphQL على المسرح.
\n\nGraphQL في PHP: اطلب فقط ما تحتاجه
\nGraphQL هي لغة استعلام طورتها Facebook. يصف العميل هيكل الاستجابة بنفسه. طلب واحد — رد واحد، دون زيادة أو نقصان في البيانات.
\nكيف يعمل GraphQL في PHP؟
\nالجزء الخادم: مكتبة webonyx/graphql-php (التثبيت: composer require webonyx/graphql-php). الجزء العميل: طلب HTTP عادي من نوع POST مع نص JSON.
مثال لاستعلام GraphQL من PHP
\n<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\n$client = new Client(['base_uri' => 'https://countries.trevorblades.com/']);\n\n$query = '\nquery GetCountry {\n country(code: "SA") {\n name\n capital\n currency\n languages {\n name\n }\n }\n}';\n\n$response = $client->post('', [\n 'json' => ['query' => $query]\n]);\n\n$data = json_decode($response->getBody(), true);\necho "الدولة: " . $data['data']['country']['name'] . PHP_EOL;\necho "العاصمة: " . $data['data']['country']['capital'] . PHP_EOL;\necho "العملة: " . $data['data']['country']['currency'] . PHP_EOL;\necho "اللغات: ";\nforeach ($data['data']['country']['languages'] as $lang) {\n echo $lang['name'] . " ";\n}\n?>