GraphQL في PHP: مكتبات webonyx/graphql-php وLighthouse لإنشاء API

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

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

ابدأ الدورة

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



GraphQL هي لغة استعلام لواجهات API، تتيح للعملاء طلب البيانات المطلوبة فقط. في نظام PHP البيئي، المكتبة الأساسية لتنفيذ GraphQL هي webonyx/graphql-php. توفر مجموعة كاملة من الأدوات لإنشاء المخططات والأنواع والمحللات. بالنسبة لإطار Laravel، توجد حزمة Lighthouse التي توسع إمكانيات graphql-php وتبسط عملية التطوير.



تثبيت webonyx/graphql-php

يتم التثبيت عبر Composer:

composer require webonyx/graphql-php


إنشاء المخطط والأنواع

أساس GraphQL هو المخطط الذي يحدد أنواع البيانات وعلاقاتها المتبادلة. لنلق نظرة على مثال لإنشاء مخطط بسيط لجلب قائمة المستخدمين.



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

// تعريف نوع 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) { // بيانات مثال - في المشروع الحقيقي سيكون هنا استعلام لقاعدة البيانات $users = [ 1 => ['id' => 1, 'name' => 'إيفان', 'email' => 'ivan@example.com'], 2 => ['id' => 2, 'name' => 'ماريا', 'email' => 'maria@example.com'], ]; return $users[$args['id']] ?? null; } ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => function () { return [ ['id' => 1, 'name' => 'إيفان', 'email' => 'ivan@example.com'], ['id' => 2, 'name' => 'ماريا', 'email' => 'maria@example.com'], ]; } ] ]]);

// إنشاء المخطط$schema = new Schema([ 'query' => $queryType]);

// تنفيذ الاستعلام$rawInput = file_get_contents('php://input');$input = json_decode($rawInput, true);$query = $input['query'];$result = GraphQL::executeQuery($schema, $query);$output = $result->toArray();

header('Content-Type: application/json');echo json_encode($output);


العمل مع الطفرات (Mutations)

بالإضافة إلى الاستعلامات (Query)، يدعم GraphQL الطفرات (Mutation) لتعديل البيانات. مثال على إنشاء طفرة لإضافة مستخدم:



<?php// تعريف نوع الطفرة$mutationType = new ObjectType([    'name' => 'Mutation',    'fields' => [        'addUser' => [            'type' => $userType,            'args' => [                'name' => Type::nonNull(Type::string()),                'email' => Type::nonNull(Type::string())            ],            'resolve' => function ($root, $args) {                // هنا يجب أن يكون كود الحفظ في قاعدة البيانات                return [                    'id' => 3,                    'name' => $args['name'],                    'email' => $args['email']                ];            }        ]    ]]);

// تحديث المخطط$schema = new Schema([ 'query' => $queryType, 'mutation' => $mutationType]);


استخدام Lighthouse مع Laravel

إذا كنت تعمل مع Laravel، يُوصى باستخدام Lighthouse. فهو يقوم بأتمتة إنشاء المخطط بناءً على نماذج Eloquent ويوفر

توصيات