API في PHP: REST وGraphQL وgRPC — أيهما تختار في 2025؟

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

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

ابدأ الدورة

مقدمة: API ليس سحرًا، بل أداة عملية

\n

عندما يتحول موقع PHP الخاص بك من صفحة ثابتة إلى كيان يتواصل مع العالم الخارجي — مثل بوتات Telegram، بوابات الدفع، أو تطبيق جوال خاص بك — ستواجه حتمًا مفهوم API (واجهة برمجة التطبيقات). إنه ببساطة عقد: "إذا أرسلت لي طلبًا بهذا التنسيق، سأعيد لك البيانات". اليوم، في ساحة PHP، هناك ثلاثة لاعبين رئيسيين: REST الكلاسيكي، GraphQL المرن، وgRPC الجريء. أيهما تختار؟ دعنا نكتشف ذلك من خلال أمثلة حية.

\n

هذه المقالة موجهة لمن يجيدون البرمجة بلغة PHP ويريدون توسيع آفاقهم. لن نكتفي بنسخ الوثائق، بل سننظر إلى كل بروتوكول بعين المطور الذي يحل مشكلة حقيقية.

\n\n

REST API في PHP: الكلاسيكية المجربة

\n

REST (نقل الحالة التمثيلية) ليس بروتوكولًا، بل أسلوب معماري. يستخدم طرق HTTP (GET، POST، PUT، DELETE) للتعامل مع الموارد. إذا سبق لك كتابة file_get_contents('https://api.example.com/users')، فقد تعاملت مع REST بالفعل.

\n

لماذا يظل REST هو الملك؟

\n
    \n
  • البساطة: أي عميل HTTP يمكنه التعامل معه.
  • \n
  • التخزين المؤقت: يمكن تخزين طلبات GET مؤقتًا على مستوى HTTP.
  • \n
  • الدعم الواسع: من curl إلى المكتبات المتخصصة.
  • \n
\n

مثال لعميل REST في PHP باستخدام Guzzle

\n

مكتبة Guzzle هي المعيار الفعلي لطلبات HTTP في PHP. قم بتثبيتها عبر Composer: composer require guzzlehttp/guzzle.

\n
<?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 يوفر معالجة مريحة للأخطاء، والوسائط الوسيطة، والنقل التدفقي.

\n

متى لا يكون REST الخيار الأفضل؟

\n

إذا كنت بحاجة إلى الحصول على بيانات مترابطة (مثل المقال + الكاتب + التعليقات)، فإن REST سيجبرك على إجراء عدة طلبات. هنا يظهر GraphQL على المسرح.

\n\n

GraphQL في PHP: اطلب فقط ما تحتاجه

\n

GraphQL هي لغة استعلام طورتها Facebook. يصف العميل هيكل الاستجابة بنفسه. طلب واحد — رد واحد، دون زيادة أو نقصان في البيانات.

\n

كيف يعمل GraphQL في PHP؟

\n

الجزء الخادم: مكتبة webonyx/graphql-php (التثبيت: composer require webonyx/graphql-php). الجزء العميل: طلب HTTP عادي من نوع POST مع نص JSON.

\n

مثال لاستعلام 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?>

المدونات

توصيات الكتب