GraphQL في PHP: دليل كامل لمكتبة webonyx/graphql-php

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

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

ابدأ الدورة

مكتبة GraphQL في PHP: webonyx/graphql-php



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



في هذه المقالة، سنستعرض بالتفصيل كيفية تثبيت وتهيئة واستخدام webonyx/graphql-php في مشروع PHP الخاص بك. المكتبة تنفذ بالكامل المواصفات الرسمية لـ GraphQL (يونيو 2018) وتدعم جميع الإمكانيات الحديثة: الاستعلامات (queries)، التحويرات (mutations)، الاشتراكات (subscriptions)، الواجهات، الاتحادات، وأكثر من ذلك بكثير.



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



يتم التثبيت عبر Composer. افتح الطرفية في جذر مشروعك ونفذ الأمر التالي:



composer require webonyx/graphql-php


بعد التثبيت، المكتبة جاهزة للاستخدام. لا يلزم أي تهيئة دنيا — فقط قم باستيراد الفئات المطلوبة إلى ملف PHP الخاص بك.



المكونات الأساسية للمكتبة



تتكون المكتبة من عدة مكونات رئيسية تتفاعل مع بعضها البعض:



  • المخطط (Schema) — يحدد أنواع البيانات والعمليات المتاحة (الاستعلامات والتحويرات).
  • الأنواع (Types) — تصف بنية البيانات (ObjectType، ScalarType، EnumType، InterfaceType، UnionType وغيرها).
  • المحللات (Resolvers) — دوال تعيد البيانات لكل حقل.
  • المنفذ (Executor) — يعالج الطلب الوارد ويعيد النتيجة.


إنشاء مخطط بسيط



لننظر إلى مثال لإنشاء مخطط GraphQL بسيط للعمل مع المستخدمين. أولاً، نحدد نوع User:



<?phpuse GraphQL\\Type\\Definition\\ObjectType;use GraphQL\\Type\\Definition\\Type;

$userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), 'age' => Type::int(), ],]);


الآن، ننشئ نوع الاستعلام الجذري Query، الذي سيعيد قائمة المستخدمين:



$queryType = new ObjectType([    'name' => 'Query',    'fields' => [        'users' => [            'type' => Type::listOf($userType),            'resolve' => function ($root, $args) {                // هنا عادةً استعلام لقاعدة البيانات                return [                    ['id' => 1, 'name' => 'إيفان إيفانوف', 'email' => 'ivan@example.com', 'age' => 30],                    ['id' => 2, 'name' => 'ماريا بيتروفا', 'email' => 'maria@example.com', 'age' => 25],                ];            },        ],        'user' => [            'type' => $userType,            'args' => [                'id' => Type::nonNull(Type::int()),            ],            'resolve' => function ($root, $args) {                // البحث عن مستخدم بواسطة المعرف                $users = [                    1 => ['id' => 1, 'name' => 'إيفان إيفانوف', 'email' => 'ivan@example.com', 'age' => 30],                    2 => ['id' => 2, 'name' => 'ماريا بيتروفا', 'email' => 'maria@example.com', 'age' => 25],                ];                return $users[$args['id']] ?? null;            },        ],    ],]);


الدمج في مخطط وتنفيذ الاستعلام



الآن، ندمج كل شيء في مخطط واحد وننفذ استعلامًا اختباريًا:



use GraphQL\\GraphQL;use GraphQL\\Schema;

$schema = new Schema([ 'query' => $queryType,]);

// استعلام GraphQL الوارد (عادةً ما يأتي في POST)$query = '{ users { id name em

توصيات