PHP में GraphQL बनाम REST: 2024 में API के लिए क्या चुनें?

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: REST या GraphQL — गति और लचीलेपन के लिए शाश्वत लड़ाई

\n

नमस्ते, डेवलपर! यदि आपने कभी PHP पर API लिखा है, तो आपने निश्चित रूप से इस दुविधा का सामना किया होगा: क्लासिक REST का उपयोग करें या आधुनिक GraphQL का। दोनों दृष्टिकोण एक ही कार्य को हल करते हैं — क्लाइंट और सर्वर के बीच डेटा स्थानांतरण, लेकिन वे इसे पूरी तरह से अलग तरीकों से करते हैं।

\n

REST कई वर्षों से डी-फैक्टो मानक रहा है: सरल, स्पष्ट, पूर्वानुमानित। लेकिन फ्रंटएंड (React, Vue, मोबाइल ऐप) की बढ़ती जटिलता के साथ, डेवलपर्स तेजी से overfetching (प्रतिक्रिया में बहुत अधिक डेटा) और underfetching (आवश्यक जानकारी एकत्र करने के लिए कई अनुरोध करने की आवश्यकता) के बारे में शिकायत कर रहे हैं। यहाँ GraphQL दृश्य में आता है — एक क्वेरी भाषा जो क्लाइंट को नियंत्रण देती है कि वास्तव में कौन सा डेटा प्राप्त करना है।

\n

इस लेख में, हम केवल सिद्धांत को सूचीबद्ध नहीं करेंगे। हम वास्तविक PHP प्रोजेक्ट (Laravel और Symfony) लेंगे, कोड लिखेंगे और देखेंगे कि क्या तेज़ काम करता है और क्या अधिक सुविधाजनक है। चलिए शुरू करते हैं!

\n\n

1. PHP में REST API: क्लासिक जो कभी खत्म नहीं होता

\n

यह कैसे काम करता है

\n

REST (Representational State Transfer) एक आर्किटेक्चरल शैली है जहाँ प्रत्येक संसाधन (उपयोगकर्ता, लेख, टिप्पणी) का अपना URL पता होता है। क्लाइंट HTTP अनुरोध (GET, POST, PUT, DELETE) भेजता है, और सर्वर डेटा की एक निश्चित संरचना लौटाता है, आमतौर पर JSON में।

\n

PHP पर एक विशिष्ट REST एंडपॉइंट का उदाहरण (बिना फ्रेमवर्क के):

\n
// index.php - सरल REST API\nheader('Content-Type: application/json');\n\n$method = $_SERVER['REQUEST_METHOD'];\n$uri = $_SERVER['REQUEST_URI'];\n\nif ($method === 'GET' && $uri === '/api/users') {\n    $users = [\n        ['id' => 1, 'name' => 'एलेक्सी', 'email' => 'alex@example.com'],\n        ['id' => 2, 'name' => 'मारिया', 'email' => 'maria@example.com']\n    ];\n    echo json_encode($users);\n}\n
\n

Laravel में यह और भी सरल दिखता है:

\n
// routes/api.php\nRoute::get('/users', function () {\n    return User::all(); // स्वचालित रूप से JSON में क्रमबद्ध होता है\n});\n
\n

REST के लाभ

\n
    \n
  • कैशिंग की सरलता: HTTP कैश (ETag, Last-Modified) बॉक्स से बाहर काम करता है।
  • \n
  • डीबग करने में आसानी: कोई भी ब्राउज़र या curl प्रतिक्रिया दिखाएगा।
  • \n
  • स्थिरता: REST 2000 से अस्तित्व में है, दस्तावेज़ीकरण और उपकरण (Postman, Swagger) पूरी तरह से तैयार हैं।
  • \n
\n

REST के नुकसान

\n
    \n
  • Overfetching: यदि क्लाइंट को केवल उपयोगकर्ता नाम चाहिए, तो भी उसे ईमेल, फ़ोन, पता मिलेगा।
  • \n
  • N+1 समस्या: उपयोगकर्ता और उसके पोस्ट प्राप्त करने के लिए दो अनुरोधों की आवश्यकता होती है (GET /users/1, GET /users/1/posts)।
  • \n
\n\n

2. PHP में GraphQL: जब क्लाइंट राजा है

\n

यह कैसे काम करता है

\n

GraphQL कोई डेटाबेस नहीं है, बल्कि क्लाइंट और सर्वर के बीच एक परत है। क्लाइंट एक एंडपॉइंट (आमतौर पर /graphql) पर POST अनुरोध भेजता है जिसमें अनुरोध का मुख्य भाग होता है, जिसमें वह बताता है कि कौन से फ़ील्ड और संबंध चाहिए। सर्वर ठीक वही लौटाता है जो अनुरोध किया गया था — एक बाइट भी अधिक नहीं।

\n

लाइब्रेरी webonyx/graphql-php के साथ PHP पर कार्यान्वयन का उदाहरण:

\n
// schema.php\nuse GraphQL\\Type\\Definition\\ObjectType;\nuse GraphQL\\Type\\Definition\\Type;\n\n$userType = new ObjectType([\n    'name' => 'User',\n    'fields' => [\n        'id' => Type::int(),\n        'name' => Type::string(),\n        'email' => Type::string(),\n    ]\n]);\n\n$queryType = new ObjectType([\n    'name' => 'Query',\n    'fields' => [\n        'user' => [\n            'type' => $userType,\n            'args' => ['id' => Type::int()],\n            'resolve' => function ($root, $args) {\n                return findUserById($args['id']); // आपका तर्क\n            }\n        ]\n    ]\n]);\n
\n

और अब क्लाइंट से अनुरोध:

\n
// अनुर                

ब्लॉग

पुस्तक अनुशंसाएँ