واجهة برمجة تطبيقات GraphQL مع PHP: برنامج تعليمي خطوة بخطوة

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر GraphQL و PHP ثنائيًا رائعًا

في عالم تطوير الويب، كانت REST API المعيار الفعلي لفترة طويلة. ومع ذلك، مع تزايد تعقيد التطبيقات وظهور العملاء المحمول، أصبحت عيوب REST واضحة: زيادة أو نقص في البيانات، العديد من نقاط النهاية، وإصدار معقد. GraphQL، الذي طورته Facebook، يحل هذه المشكلات من خلال السماح للعميل بطلب البيانات التي يحتاجها فقط والحصول عليها في طلب واحد.

PHP، على الرغم من كونها "مدرسة قديمة"، لا تزال لغة قوية لبناء منطق الخادم. بفضل المكتبات الحديثة مثل webonyx/graphql-php، أصبح تنفيذ GraphQL API على PHP أمرًا بسيطًا وفعالًا. في هذا البرنامج التعليمي، سنقوم خطوة بخطوة ببناء خادم GraphQL كامل قادر على معالجة الاستعلامات والتحويرات (mutations) والعمل مع قاعدة البيانات.

سنستخدم PHP 8.0+، و Composer لإدارة التبعيات، وخادم PHP المدمج للاختبار المحلي. في نهاية المقال، ستتمكن من نشر API الخاص بك ودمجه مع أي واجهة أمامية.



1. تثبيت وتهيئة البيئة

قبل كتابة الكود، يجب تجهيز المشروع. تأكد من تثبيت PHP 8.0+ و Composer. قم بإنشاء مجلد جديد للمشروع وانتقل إليه:

mkdir graphql-php-tutorialcd graphql-php-tutorial

الآن قم بتثبيت المكتبة الأساسية webonyx/graphql-php باستخدام Composer:

composer require webonyx/graphql-php

للعمل مع قاعدة البيانات، سنستخدم PDO المضمن في PHP. بالإضافة إلى ذلك، سنقوم بتثبيت مكتبة لتحليل الاستعلامات بسهولة:

composer require graphql-php/graphql-php

قم بإنشاء ملف index.php - سيكون هذا هو نقطة الدخول إلى تطبيقنا. قم بإعداد التحميل التلقائي لـ Composer والهيكل الأساسي:

<?phprequire_once __DIR__ . '/vendor/autoload.php';

use GraphQL\\GraphQL;use GraphQL\\Type\\Schema;use GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;

// هنا سيكون منطقنا

قم أيضًا بإنشاء ملف schema.graphql لتخزين المخطط (schema) بتنسيق نصي (اختياري، ولكنه مناسب للمشاريع الكبيرة).



2. تعريف المخطط وأنواع البيانات

قلب أي GraphQL API هو المخطط (schema). فهو يصف البيانات المتاحة وكيفية الوصول إليها. في مثالنا، سننشئ نموذجًا بسيطًا للمستخدم (User) والمنشور (Post).

لنبدأ بتعريف الأنواع. في ملف index.php، أضف الكلاسات التالية:

// نوع User$userType = new ObjectType([    'name' => 'User',    'fields' => [        'id' => Type::int(),        'name' => Type::string(),        'email' => Type::string(),        'posts' => [            'type' => Type::listOf($postType),            'resolve' => function ($user) use ($db) {                // دالة resolver لتحميل منشورات المستخدم                $stmt = $db->prepare('SELECT * FROM posts WHERE user_id = :id');                $stmt->execute([':id' => $user['id']]);                return $stmt->fetchAll(PDO::FETCH_ASSOC);            }        ]    ]]);

// نوع Post$postType = new ObjectType([ 'name' => 'Post', 'fields' => [ 'id' => Type::int(), 'title' => Type::string(), 'content' => Type::string(), 'author' => [ 'type' => $userType, 'resolve' => function ($post) use ($db) { $stmt = $db->prepare('SELECT * FROM users WHERE id = :id'); $stmt->execute([':id' => $post['user_id']]); return $stmt->fetch(PDO::FETCH_ASSOC); } ] ]]);

لاحظ الدوال الحلالة (resolvers) - وهي دوال تحدد كيفية الحصول على البيانات لكل حقل. في المثال أعلاه، نستخدم PDO للاستعلام عن قاعدة البيانات.

الآن قم بإنشاء

المدونات

توصيات الكتب