GraphQL API مع PHP: دليل تعليمي خطوة بخطوة للمبتدئين

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

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

ابدأ الدورة

مقدمة إلى GraphQL و PHP



GraphQL هي لغة استعلام لواجهات API، تم تطويرها بواسطة Facebook، وتتيح للعملاء طلب البيانات التي يحتاجونها فقط. على عكس REST، حيث يعيد كل نقطة نهاية بنية بيانات ثابتة، يوفر GraphQL المرونة والكفاءة. إذا كنت تعمل مع PHP وترغب في تطبيق واجهة API حديثة، فهذا البرنامج التعليمي لك.



في هذا الدليل، سننشئ واجهة GraphQL API بسيطة ولكنها وظيفية باستخدام مكتبة webonyx/graphql-php. ستتعلم كيفية تثبيت التبعيات، وتحديد المخطط (schema)، والأنواع (types)، والمحللون (resolvers)، ومعالجة الاستعلامات. ستساعدك أمثلة الكود على البدء بسرعة.



1. إعداد البيئة وتثبيت التبعيات



للبدء، تأكد من تثبيت PHP الإصدار 7.4 أو أعلى و Composer - مدير التبعيات لـ PHP. إذا لم يكن Composer مثبتًا بعد، قم بتنزيله من الموقع الرسمي.



أنشئ مشروعًا جديدًا وقم بتثبيت مكتبة webonyx/graphql-php:



mkdir graphql-php-tutorialcd graphql-php-tutorialcomposer init --name="myapp/graphql-demo" --type="project" --no-interactioncomposer require webonyx/graphql-php


بعد التثبيت، سيظهر في مجلد المشروع دليل vendor وملف composer.json. قم أيضًا بإنشاء ملف index.php - حيث سيكون كل الكود الخاص بنا.



بالإضافة إلى ذلك، لتسهيل العمل مع طلبات HTTP، قم بتثبيت laminas/laminas-diactoros (تطبيق PSR-7 شائع) و laminas/laminas-httphandlerrunner:



composer require laminas/laminas-diactoroscomposer require laminas/laminas-httphandlerrunner


2. تعريف المخطط (Schema) والأنواع (Types) في GraphQL



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



أولاً، سنحدد الأنواع باستخدام الكلاس GraphQL\\Type\\Definition\\ObjectType. أنشئ ملفًا schema.php (أو أضف الكود مباشرة في index.php).



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

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

// تعريف نوع User$userType = new ObjectType([ 'name' => 'User', 'description' => 'يمثل مستخدم النظام', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), ]]);

// تعريف نوع Post$postType = new ObjectType([ 'name' => 'Post', 'description' => 'منشور المستخدم', 'fields' => [ 'id' => Type::int(), 'title' => Type::string(), 'content' => Type::string(), 'author' => $userType, // العلاقة مع المستخدم ]]);


لاحظ: نحن نستخدم Type::int() و Type::string() - وهما من الأنواع العددية (scalar types) المضمنة في GraphQL. الحقل author يشير إلى نوع كائن آخر، مما يسمح ببناء استعلامات متداخلة.



3. إنشاء المحللون (Resolvers) والبيانات الوهمية



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



سنضيف محللين لنوع الجذر Query. من خلاله سيحصل العملاء على البيانات.



// بيانات وهمية$users = [    1 => ['id' => 1, 'name' => 'إيفان بيتروف', 'email' => 'ivan@example.com'],    2 => ['id' => 2, 'name' => 'ماريا سميرنوفا', 'email' => 'maria@example.com'],];

$posts = [ 1 => ['id' => 1, 'title' => 'المدخل الأول', 'content' => 'نص المدخل الأول', 'author_id' => 1],

المدونات

توصيات الكتب