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

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

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

ابدأ الدورة

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



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



لماذا يعتبر GraphQL و PHP ثنائيًا ممتازًا؟

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

  • مرونة الاستعلامات - يقرر العميل بنفسه الحقول التي سيحصل عليها.
  • نقطة دخول واحدة - بدلاً من نقاط نهاية متعددة، نقطة نهاية واحدة /graphql.
  • كتابة قوية (Typing) - يحدد المخطط جميع الأنواع والعلاقات.
  • سهولة للواجهة الأمامية - تعمل أطر العمل مثل React و Vue بسهولة مع GraphQL.


تنفيذ واجهة برمجة تطبيقات GraphQL باستخدام PHP خطوة بخطوة



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

للبدء، سننشئ مشروعًا جديدًا ونثبت المكتبة الرئيسية عبر Composer:

composer require webonyx/graphql-php

سنحتاج أيضًا إلى معالج HTTP متوافق مع PSR-7. سنستخدم guzzlehttp/psr7 و nyholm/psr7-server:

composer require guzzlehttp/psr7 nyholm/psr7-server

لننشئ هيكل المجلدات الأساسي:

project/├── src/│   ├── Schema/│   ├── Resolvers/│   └── Types/├── public/│   └── index.php├── vendor/└── composer.json


2. تعريف مخطط GraphQL

المخطط هو قلب واجهة برمجة تطبيقات GraphQL. يصف أنواع البيانات والعمليات المتاحة. لننشئ ملف src/Schema/Schema.php:

<?phpnamespace App\\Schema;

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

class Schema{ public static function build(): GraphQLSchema { // نوع "User" $userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string(), ] ]);

// نوع "Query" — الاستعلام الجذري $queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'user' => [ 'type' => $userType, 'args' => [ 'id' => Type::nonNull(Type::int()) ], 'resolve' => function ($root, $args) { // هنا سيكون المحلل return UserResolver::getUser($args['id']); } ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => function () { return UserResolver::getAllUsers(); } ] ] ]);

// نوع "Mutation" — التحول الجذري $mutationType = new ObjectType([ 'name' => 'Mutation', 'fields' => [ 'createUser' => [ 'type' => $userType, 'args' => [ 'name' => Type::nonNull(Type::string()), 'email' => Type::nonNull(Type::string()) ], 'resolve' => function ($root, $args) { return UserResolver::createUser($args['name'], $args['email']); } ] ] ]);

return new GraphQLSchema([

المدونات

توصيات الكتب