PHP के साथ GraphQL का परिचय: यह क्यों आज़माना चाहिए
\n\nGraphQL Facebook द्वारा विकसित API के लिए एक आधुनिक क्वेरी भाषा है। REST के विपरीत, जहां प्रत्येक एंडपॉइंट डेटा की एक निश्चित संरचना लौटाता है, GraphQL क्लाइंट को केवल उन फ़ील्ड को अनुरोध करने की अनुमति देता है जिनकी उसे आवश्यकता होती है। यह स्थानांतरित डेटा की मात्रा को कम करता है और जटिल अनुप्रयोगों के विकास को सरल बनाता है।
\n\nइस ट्यूटोरियल में, हम webonyx/graphql-php लाइब्रेरी का उपयोग करके PHP में एक पूर्ण GraphQL API बनाएंगे। आप सीखेंगे कि स्कीमा कैसे परिभाषित करें, रिज़ॉल्वर कैसे लिखें, क्वेरी और म्यूटेशन को कैसे संसाधित करें, और GraphiQL के माध्यम से API का परीक्षण कैसे करें।
\n\nयह माना जाता है कि आपके पास PHP 8.0+ और Composer स्थापित है। यदि नहीं, तो उन्हें स्थापित करके शुरू करें।
\n\nप्रोजेक्ट की स्थापना और कॉन्फ़िगरेशन
\n\nचरण 1: प्रोजेक्ट बनाना और निर्भरताएँ स्थापित करना
\n\nप्रोजेक्ट के लिए एक नई निर्देशिका बनाएँ और Composer को आरंभ करें:
\n\nmkdir graphql-php-tutorial\ncd graphql-php-tutorial\ncomposer init\n\nwebonyx/graphql-php लाइब्रेरी स्थापित करें:
composer require webonyx/graphql-php\n\nसरल रूटिंग के लिए nikic/fast-route भी स्थापित करें (वैकल्पिक, लेकिन सुविधाजनक):
composer require nikic/fast-route\n\nचरण 2: प्रोजेक्ट संरचना
\n\nनिम्नलिखित फ़ोल्डर संरचना बनाएँ:
\n\ngraphql-php-tutorial/\n├── src/\n│ ├── Schema/\n│ │ └── schema.php\n│ ├── Resolvers/\n│ │ ├── QueryResolver.php\n│ │ └── MutationResolver.php\n│ └── Data/\n│ └── Database.php\n├── public/\n│ └── index.php\n├── vendor/\n└── composer.json\n\nGraphQL स्कीमा बनाना
\n\nचरण 3: प्रकार और स्कीमा परिभाषित करना
\n\nएक सरल डेटा मॉडल बनाते हैं: उपयोगकर्ता (User) और पोस्ट (Post)। src/Schema/schema.php खोलें और निम्नलिखित कोड जोड़ें:
<?php\n\nnamespace App\\Schema;\n\nuse GraphQL\\Type\\Definition\\ObjectType;\nuse GraphQL\\Type\\Definition\\Type;\nuse GraphQL\\Type\\Schema as GraphQLSchema;\n\nclass Schema\n{\n public static function build(): GraphQLSchema\n {\n // User प्रकार\n $userType = new ObjectType([\n 'name' => 'User',\n 'fields' => [\n 'id' => Type::int(),\n 'name' => Type::string(),\n 'email' => Type::string(),\n 'posts' => [\n 'type' => Type::listOf(function() use (&$postType) {\n return $postType;\n }),\n 'resolve' => function($user) {\n return \\App\\Resolvers\\QueryResolver::getPostsByUser($user['id']);\n }\n ]\n ]\n ]);\n\n // Post प्रकार\n $postType = new ObjectType([\n 'name' => 'Post',\n 'fields' => [\n 'id' => Type::int(),\n 'title' => Type::string(),\n 'content' => Type::string(),\n 'author' => [\n 'type' => $userType,\n 'resolve' => function($post) {\n return \\App\\Resolvers\\QueryResolver::getUserById($post['author_id']);\n }\n ]\n ]\n ]);\n\n // रूट Query प्रकार\n $queryType = new ObjectType([\n 'name' => 'Query',\n 'fields' => [\n 'users' => [\n 'type' => Type::listOf($userType),\n 'resolve' => function() {\n return \\App\\Resolvers\\QueryResolver::getAllUsers();\n }\n ],\n 'user' => [\n 'type' => $userType,\n 'args' => [\n 'id' => Type::nonNull(Type::int())\n ]