GraphQL और PHP का परिचय
GraphQL Facebook द्वारा विकसित API के लिए एक क्वेरी भाषा है, जो क्लाइंट को केवल वही डेटा माँगने की अनुमति देती है जिसकी उन्हें वास्तव में आवश्यकता है। REST के विपरीत, जहाँ प्रत्येक एंडपॉइंट एक निश्चित डेटा संरचना लौटाता है, GraphQL लचीलापन और दक्षता प्रदान करता है। यदि आप PHP के साथ काम करते हैं और एक आधुनिक API लागू करना चाहते हैं, तो यह ट्यूटोरियल आपके लिए है।
इस गाइड में, हम webonyx/graphql-php लाइब्रेरी का उपयोग करके एक सरल लेकिन कार्यात्मक GraphQL API बनाएंगे। आप सीखेंगे कि निर्भरताएँ कैसे स्थापित करें, स्कीमा, टाइप, रिज़ॉल्वर को परिभाषित करें और क्वेरी को प्रोसेस करें। कोड उदाहरण आपको जल्दी शुरू करने में मदद करेंगे।
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-httphandlerrunner2. 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() का उपयोग कर रहे हैं — ये GraphQL के अंतर्निहित स्केलर टाइप हैं। author फ़ील्ड दूसरे ऑब्जेक्ट टाइप को संदर्भित करता है, जो नेस्टेड क्वेरी बनाने की अनुमति देता है।
3. रिज़ॉल्वर और डमी डेटा बनाना
रिज़ॉल्वर (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],```