GraphQL क्या है? स्कीमा, प्रश्न, और API व्यापारिक निर्णय

GraphQL क्या है?

Scrapeless Agent Browser एक ब्राउज़र पृष्ठ चला सकता है जो GraphQL अनुरोधों के माध्यम से डेटा लोड करता है जो एक अधिकृत वेब कार्यप्रवाह का हिस्सा है।

GraphQL एक प्रश्न भाषा और API के लिए निष्पादन मॉडल है जो एक प्रकार की स्कीमा के चारों ओर निर्मित है। एक क्लाइंट नामित फील्ड के लिए पूछता है, और एक सर्वर उन फील्ड को चयन के समान परिणाम में हल करता है। यह एक इंटरफ़ेस से भिन्न है जहां हर URL एक निश्चित प्रतिनिधित्व लौटाता है। यह भेद तब उपयोगी होता है जब एक एप्लिकेशन को अलग-अलग स्तर पर संबंधित डेटा की आवश्यकता होती है।

GraphQL यह निर्दिष्ट नहीं करता है कि अंतर्निहित डेटा कहाँ स्थित है या एक अनुरोध केवल इसलिए सुरक्षित है क्योंकि इसमें एक स्कीमा है। सेवा को अभी भी रिसॉल्वर, प्रमाणीकरण, प्राधिकरण, संचालन सीमाएँ, और एक परिवहन समझौते की आवश्यकता है। यह मार्गदर्शिका स्कीमा से परिणाम तक एक अनुरोध का पालन करती है और फिर यह देखती है कि GraphQL एक एकीकरण में मदद करता है या जटिलता लाता है।

स्कीमा API अनुबंध है

एक GraphQL स्कीमा प्रकार, फील्ड, तर्क, और संचालन प्रवेश बिंदुओं का नाम देता है। एक फील्ड प्रकार प्रणाली के अनुसार एक स्केलर, एक ऑब्जेक्ट, एक सूची, या एक नल मान लौटा सकता है। आधिकारिक स्कीमा गाइड यह बताता है कि ये घोषणाएँ क्लाइंट क्या पूछ सकता है। एक क्लाइंट केवल मनमाने डेटाबेस कॉलम का अनुरोध नहीं कर सकता क्योंकि वह एक प्रश्न में एक फील्ड नाम लिख सकता है।

स्कीमा संबंधों को दिखाता है। एक आइटम प्रकार एक शीर्षक और एक विक्रेता फील्ड को उजागर कर सकता है, जबकि विक्रेता प्रकार एक प्रदर्शन नाम को उजागर करता है। यदि स्कीमा अनुमति देता है, तो एक क्लाइंट एक संचालन में शीर्षक और घोंसला विक्रेता नाम चुन सकता है। सर्वर यह तय करता है कि उन मानों को कैसे लाया जाए। वह निर्णय एक डेटाबेस, दूसरी सेवा, या एक कैश किए गए परिणाम को शामिल कर सकता है।

नलता अनुबंध का हिस्सा है। यह बताता है कि एक फील्ड एक वैध प्रतिक्रिया में अनुपस्थित हो सकती है या नहीं, न कि यह कि एक अंतर्निहित स्रोत क्यों विफल हुआ। क्लाइंट को स्कीमा के खिलाफ उत्पन्न और परीक्षण करना चाहिए, लेकिन उन्हें अभी भी एप्लिकेशन त्रुटियों और डेटा गुणवत्ता को संभालना होगा। एक गैर-नल घोषणा एक अप्रिय अपस्ट्रीम स्रोत को जादुई रूप से पूरा नहीं कर सकती।

GraphQL प्रश्न अपनी आकृति कैसे प्राप्त करता है

एक प्रश्न संचालन प्रश्न मूल से शुरू होता है और स्केलर पत्तियों तक फील्ड चुनता है। आधिकारिक प्रश्न गाइड यह दिखाता है कि एक क्लाइंट वास्तव में किस प्रकार के फील्ड को एक विशेष स्कीमा से मांग सकता है। तर्क डेटा को फ़िल्टर या पहचान सकते हैं, और वेरिएबल क्लाइंट को प्रश्न पाठ से अलग-अलग मान प्रदान करने की अनुमति देते हैं। प्रतिक्रिया डेटा चयनित फील्ड संरचना के समान होती है।

यह चयन उस स्क्रीन के लिए अनावश्यक फील्ड को कम कर सकता है जिसे केवल एक सारांश की आवश्यकता होती है। यह संबंधित फील्ड को भी संयोजित कर सकता है जो अन्यथा कई संसाधन अनुरोधों की आवश्यकता होगी। कोई भी परिणाम स्वचालित नहीं है। सर्वर अभी भी एक नेस्टेड फील्ड के लिए महंगा कार्य कर सकता है, और एक क्लाइंट स्क्रीन की आवश्यकता से कहीं अधिक मांग सकता है। फील्ड चयन लचीलापन देता है जिसे लागत नियंत्रण की आवश्यकता होती है।

एक उपयोगी मानसिक मॉडल एक रेस्तरां मेनू है जिसमें स्पष्ट विकल्प होते हैं, लेकिन परिणाम एक उपमा की तुलना में अधिक कड़ा होता है: नाम और प्रकार निष्पादन से पहले स्कीमा के खिलाफ मान्यता प्राप्त होते हैं। एक गलत स्पेलिंग वाला फील्ड एक मान्यता त्रुटि उत्पन्न करता है न कि एक खाली प्रॉपर्टी। यह प्रारंभिक चेक डेवलपर्स को असंगति की खोज में मदद करता है इससे पहले कि वे भ्रमित करने वाले आंशिक परिणाम की व्याख्या करें।

म्यूटेशन, सब्सक्रिप्शन, और परिवहन

प्रश्न डेटा को पढ़ते हैं। म्यूटेशन संचालन का प्रतिनिधित्व करते हैं जो सर्वर की स्थिति को बदल सकते हैं, और सब्सक्रिप्शन एक सेवा द्वारा समर्थन किए जाने पर अद्यतन प्राप्त करने का एक तरीका है। ये GraphQL संचालन श्रेणियाँ हैं, न कि किसी विशेष तैनाती के बारे में गारंटी। GraphQL संचालन संदर्भ उनकी वाक्यविन्यास और चयन व्यवहार का वर्णन करता है।

कई GraphQL सेवाएँ प्रश्नों और म्यूटेशनों के लिए HTTP का उपयोग करती हैं, लेकिन GraphQL भाषा HTTP से अलग है। एक अनुरोध एक दस्तावेज़, वेरिएबल, और एक संचालन नाम ले जा सकता है; सेवा यह तय करती है कि यह उस विनिमय को कैसे उजागर करती है। एक सब्सक्रिप्शन के लिए एक समर्थित स्ट्रीमिंग परिवहन और जीवन चक्र की आवश्यकता होती है। यह मान लेना न करें कि एक सर्वर केवल इसलिए सब्सक्रिप्शन का समर्थन करता है क्योंकि GraphQL भाषा उन्हें परिभाषित करती है।

एक GraphQL प्रतिक्रिया डेटा और त्रुटियों को शामिल कर सकती है। आंशिक डेटा तब संभव है जब कुछ फील्ड हल हो जाएं जबकि अन्य विफल हो जाएं। आधिकारिक निष्पादन गाइड चयनित फील्ड के पीछे रिसॉल्वर पथ को स्पष्ट करता है। आवेदन कोड को प्रतिक्रियाओं के दोनों भागों का निरीक्षण करना चाहिए, इसके बजाय डेटा की उपस्थिति को कुल सफलता के रूप में मानते हुए। तैनात परिवहन के स्थिति और त्रुटि संवर्द्धन भी महत्वपूर्ण हैं।

GraphQL की तुलना REST-उन्मुख इंटरफेस से

एक REST-उन्मुख API इंटरफेस के तहत संसाधनों और प्रतिनिधित्वों के चारों ओर बातचीत को व्यवस्थित करता है। GraphQL क्लाइंट अनुरोधों को स्कीमा के फील्ड और संचालन के चारों ओर व्यवस्थित करता है। कोई भी शैली अच्छी या बुरी तरह लागू की जा सकती है। यह चयन करता है कि क्लाइंट डेटा को कैसे खोजते हैं, सर्वर कार्य को कैसे सीमित करते हैं, और कैसे कैशिंग या संस्करण परिवर्तनों का प्रबंधन होता है; यह निर्धारित नहीं करता है कि अंतर्निहित डेटा सटीक है या नहीं।

एक संसाधन एंडपॉइंट को कैश करने और इसके बारे में सोचने में आसान हो सकता है जब कई क्लाइंट एक ही प्रतिनिधित्व की आवश्यकता होती है। GraphQL फील्ड चयन तब मदद करता है जब क्लाइंट को संबंधित डेटा के विभिन्न संयोजनों की आवश्यकता होती है। यह साझा HTTP कैशिंग को कम सीधा बना सकता है क्योंकि विभिन्न प्रश्न दस्तावेज़ एक ही एंडपॉइंट को लक्ष्य बना सकते हैं। टीमें अक्सर इस व्यापार मूल्य को प्रबंधित करने के लिए संचालन-स्तरीय नियंत्रण और एप्लिकेशन कैश जोड़ती हैं।

GraphQL विभाजन, फ़िल्टरिंग नियम, या प्राधिकरण की आवश्यकता को समाप्त नहीं करता है। कई नेस्टेड ऑब्जेक्ट्स के लिए पूछने वाला एक प्रश्न महंगा हो सकता है, भले ही यह एक HTTP अनुरोध हो। वास्तविक संचालन के साथ क्लाइंट अनुभव और सर्वर लागत दोनों का मूल्यांकन करें, जिसमें जानबूझकर बड़े या गलत फ़ॉर्मैट की गई चयन भी शामिल हैं। अंतर्निहित कार्य की गणना करें, न कि केवल नेटवर्क राउंड ट्रिप।

क्यों ब्राउज़र पृष्ठ GraphQL का उपयोग कर सकते हैं

एक आधुनिक पृष्ठ एक HTML शेल लोड कर सकता है और फिर दृश्य इंटरफेस के लिए संरचित डेटा का अनुरोध कर सकता है। इसका नेटवर्क ट्रैफिक GraphQL ऑपरेशनों को शामिल कर सकता है जिनके प्रतिक्रिया क्षेत्र कार्ड या डैशबोर्ड को फीड करते हैं। Scrapeless एजेंट ब्राउज़र पृष्ठ और इसके JavaScript को चलाता है, ब्राउज़र स्वचालन के माध्यम से प्रदर्शित स्थिति को प्रदर्शित करता है। एजेंट ब्राउज़र दस्तावेज़ीकरण उस ब्राउज़र निष्पादन भूमिका को कवर करता है।

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

जब कार्य यह सत्यापित करना है कि उपयोगकर्ता क्या देखता है, तो प्रदर्शित ब्राउज़र आउटपुट और अंतर्निहित नेटवर्क डेटा विभिन्न प्रश्नों के उत्तर देते हैं। एक GraphQL प्रतिक्रिया में ऐसे क्षेत्र हो सकते हैं जो पृष्ठ कभी प्रदर्शित नहीं करता; एक पृष्ठ उन्हें परिवर्तित या छोड़ सकता है। तय करें कि आपका उपयोग मामला किस प्रतिनिधित्व की आवश्यकता है, और यह बताने के लिए पर्याप्त संदर्भ रिकॉर्ड करें कि वह प्रतिनिधित्व सही क्यों है।

GraphQL को सुरक्षित रूप से डिज़ाइन करना और उपभोग करना

सर्वर पर, संवेदनशील डेटा हल होने की संभावना वाले क्षेत्र या संसाधन सीमा पर प्रमाणीकरण लागू करें। एक स्कीमा क्षेत्र का अस्तित्व यह नहीं दर्शाता कि हर उपयोगकर्ता इसके मान को पढ़ सकता है। महंगे ऑपरेशनों को सर्वर के समर्थित जटिलता, पृष्ठांकन, या गहराई नियंत्रणों के साथ सीमित करें। वास्तविक रिज़ॉल्वर कार्य का अवलोकन करें ताकि एक कॉम्पैक्ट-दिखाई देने वाला क्वेरी चुपचाप बड़े बैकएंड कार्यभार में विस्तार न कर सके।

क्लाइंट पर, क्वेरी दस्तावेजों को उन स्क्रीन या ऑपरेशनों के करीब रखें जो उनका उपयोग करते हैं। केवल आवश्यक क्षेत्रों का अनुरोध करें, वेरिएबल्स को स्पष्ट प्रकार दें, और शून्यीय मानों और आंशिक त्रुटियों को संभालें। एक स्कीमा में परिवर्तन को वास्तविक क्लाइंट ऑपरेशनों के खिलाफ समीक्षा की जानी चाहिए; एक क्षेत्र जोड़ना सुरक्षित हो सकता है, जबकि एक स्थापित क्षेत्र के अर्थ को बदलना क्लाइंट को तोड़ सकता है भले ही व्याकरण मान्य हो।

जिस सेवा का आप संचालन नहीं करते हैं, उसकी सार्वजनिक दस्तावेज़ीकरण पढ़ें बजाय विशेषाधिकार प्राप्त ऑपरेशनों को उलटने की। एक संकीर्ण अधिकृत क्वेरी का परीक्षण करें और उसकी प्रतिक्रिया संरचना का निरीक्षण करें। यदि सेवा बदलती है, तो एक स्कीमा त्रुटि या अप्रत्याशित शून्य को अनुबंध समीक्षा की ओर ले जाना चाहिए, न कि यह मान लेना कि ब्राउज़र पृष्ठ या इसकी आंतरिक ट्रैफिक एक व्यापक डेटा अधिकार प्रदान करता है।

निष्कर्ष

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

एक ब्राउज़र के साथ गतिशील पृष्ठों का निरीक्षण करें

जब दृश्य इंटरफेस JavaScript-लोडेड डेटा पर निर्भर करता है तो अधिकृत पृष्ठ कार्यप्रवाह के लिए एजेंट ब्राउज़र का उपयोग करें।

आज साइन अप करें और प्राप्त करें $5 निःशुल्क क्रेडिट — कोई क्रेडिट कार्ड आवश्यक नहीं है.

आपके $5 क्रेडिट का दावा करें →

सामान्य प्रश्न

क्या GraphQL एक डेटाबेस है?

GraphQL एक API क्वेरी भाषा और निष्पादन मॉडल है, न कि एक डेटाबेस। एक GraphQL सर्वर डेटाबेस, अन्य APIs, या गणनांकित मानों से क्षेत्रों को हल कर सकता है। स्कीमा क्लाइंट-फेसिंग अनुबंध को परिभाषित करता है जबकि सेवा प्रत्येक मान प्राप्त करने का तरीका चुनती है।

क्या GraphQL REST को प्रतिस्थापित करता है?

GraphQL एक अलग इंटरफ़ेस शैली प्रदान करता है लेकिन स्वचालित रूप से हर संसाधन-उन्मुख API को प्रतिस्थापित नहीं करता। एक टीम विभिन्न कार्यों के लिए दोनों का उपयोग कर सकती है। प्राथमिक इंटरफ़ेस के रूप में एक का चयन करने से पहले क्लाइंट डेटा की आवश्यकताओं, सर्वर की जटिलता, कैशिंग, और शासन की तुलना करें।

क्या एक GraphQL प्रतिक्रिया डेटा और त्रुटियों को एक साथ शामिल कर सकती है?

हाँ। एक GraphQL ऑपरेशन आंशिक डेटा के साथ त्रुटियों को वापस कर सकता है जब कुछ क्षेत्र हल होते हैं और अन्य विफल होते हैं। एक क्लाइंट को दोनों भागों का निरीक्षण करना चाहिए और यह तय करना चाहिए कि उपलब्ध डेटा विशिष्ट स्क्रीन या कार्यप्रवाह के लिए पर्याप्त है या नहीं।

क्या एक ब्राउज़र में GraphQL अनुरोध देखना इसे सार्वजनिक बनाता है?

नहीं। एक ब्राउज़र डेवलपर टूल्स में दिखाई देने वाला अनुरोध एक खाता सत्र या एक निजी फ्रंटएंड अनुबंध पर निर्भर कर सकता है। एक्सेस और पुन: उपयोग अभी भी प्रमाणीकरण, प्रकाशित इंटरफेस, और लागू शर्तों पर निर्भर करते हैं। संग्रह कार्यप्रवाह के लिए केवल सार्वजनिक या स्पष्ट रूप से अधिकृत डेटा का उपयोग करें।

संदर्भ