आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं।
ग्राफकलाइन एक HTTP-आधारित विनिर्देश है जो RESTful का निर्माण करते समय आपके सामने आने वाली अधिकांश समस्याओं को हल करता है एपीआई। यह जटिल एपीआई के निर्माण के लिए उपयुक्त है क्योंकि आप कई स्कीमाओं से डेटा तक पहुँचने के लिए एक समापन बिंदु का उपयोग कर सकते हैं।
ग्राफकलाइन REST में ओवर-फ़ेचिंग और अंडर-फ़ेचिंग जैसे मुद्दों को कम करता है। आप एक क्लाइंट बना सकते हैं जो अतिरिक्त एपीआई कॉल किए बिना विशिष्ट फ़ील्ड का अनुरोध करता है।
ऐसे कई गो पैकेज हैं जिनका लाभ आप सर्वर से लेकर एपीआई तक ग्राफक्यूएल-आधारित एप्लिकेशन बनाने के लिए उठा सकते हैं।
1. Gqlgen पैकेज
gqlgen (ग्राफ़क्यूएल जेनरेटर) ग्राफक्यूएल सर्वर और एपीआई बनाने और बनाने के लिए एक सुविधा संपन्न, प्रकार-सुरक्षित पैकेज है।
gqlgen पैकेज एक स्कीमा-प्रथम दृष्टिकोण लेता है, जिसके द्वारा आप अपने स्कीमा को परिभाषित करने के लिए ग्राफक्यूएल एसडीएल का उपयोग करते हैं। इसके बाद यह बॉयलरप्लेट कोड उत्पन्न करता है जिसे आप अपने ग्राफक्यूएल सर्वर और एपीआई को सेट करने के लिए समायोजित कर सकते हैं।
gqlgen अधिक पूर्ण ग्राफक्यूएल पैकेजों में से एक है गो पारिस्थितिकी तंत्र. आप पैकेज के साथ दस्तावेज़ीकरण और उदाहरण उत्पन्न कर सकते हैं और क्वेरीज़, म्यूटेशन और सब्सक्रिप्शन बना सकते हैं।
gqlgen टाइप बाइंडिंग, एम्बेडिंग, इंटरफेस, जेनरेट किए गए इनपुट और एनम को सुनिश्चित करता है। पैकेज ओपन ट्रेसिंग, एरर लॉगिंग के लिए हुक, डेटा लोडिंग, कॉन्करेंसी और बढ़ी हुई क्वेरी जटिलता के लिए कार्यक्षमता भी प्रदान करता है।
अपने ग्राफक्यूएल स्कीमा को परिभाषित करने के बाद—जैसा कि आप किसी भी स्कीमा-फर्स्ट लाइब्रेरी के साथ करेंगे—आप अपने प्रोजेक्ट में स्कीमा से बॉयलरप्लेट कोड उत्पन्न करने के लिए gqlgen कमांड-लाइन ऐप का उपयोग करेंगे।
एक बनाने के tools.go अपनी कार्यशील निर्देशिका में फ़ाइल करें और कोड की इन पंक्तियों को शामिल करने के लिए जोड़ें gqlgen पैकेट:
// + उपकरण बनाएं
पैकेट औजार
आयात _ "github.com/99designs/gqlgen"
tools.go फ़ाइल के लिए निर्माण उपकरण निर्दिष्ट करता है gqlgen पैकेट।
gqlgen पैकेज और इसकी निर्भरताओं को स्थापित करने के लिए इन आदेशों को अपनी कार्यशील निर्देशिका में चलाएँ:
जाना github.com/ स्थापित करें99डिजाइन/gqlgen@latest
जाना आधुनिक साफ
जब आप ग्राफ़िकल पैकेज के साथ चलाते हैं तो आप एक नया ग्राफ़क्यूएल प्रोजेक्ट शुरू कर सकते हैं इस में एक तर्क के रूप में आदेश:
जाना github.com/ चलाएँ99डिजाइन/gqlgen init
आपको अपनी स्कीमा को एक में रखना होगा स्कीमा.ग्राफक्यूएल किसी प्रोजेक्ट को इनिशियलाइज़ करने के लिए आपकी वर्किंग डायरेक्टरी में स्थित फ़ाइल।
चलाएँ server.go अपने ग्राफक्यूएल ऐप में कार्यक्षमता जोड़ने के बाद अपना ग्राफक्यूएल सर्वर शुरू करने के लिए फाइल करें:
जाना सर्वर चलाएँ।जाना
2. ग्राफिकल-गो पैकेज
ग्राफिकल-गो पैकेज एक लोकप्रिय ग्राफक्यूएल लाइब्रेरी है जिसका लक्ष्य संपूर्ण प्रदान करना है ग्राफक्यूएल ड्राफ्ट विनिर्देश गो में ग्राफक्यूएल सेवाओं के निर्माण के लिए।
ग्राफ़कल-गो पैकेज रनटाइम प्रकार के दृष्टिकोण को अपनाता है; आपके पास गो कोड में अपनी स्कीमा घोषित करने का विकल्प है, और रनटाइम पर पैकेज की जाँच करता है।
आप प्रश्नों, म्यूटेशन और सब्सक्रिप्शन को लागू कर सकते हैं और पैकेज के साथ उदाहरण उत्पन्न कर सकते हैं, लेकिन जनरेट किए गए एनम, इनपुट या ओपन ट्रेसिंग के लिए कोई कार्यक्षमता नहीं है।
ग्राफ़कल-गो में बिल्ट-इन पैकेज और लोकप्रिय तृतीय-पक्ष दोनों के लिए समर्थन के साथ एक न्यूनतम एपीआई है। इसके लिए समर्थन है ओपन टेलीमेट्री और ओपनट्रेसिंग मानक, रिज़ॉल्वर के विरुद्ध स्कीमा प्रकार की जाँच, रिज़ॉल्वर का समानांतर निष्पादन, और कई अन्य सुविधाएँ।
यदि आप परिचित हैं गो के साथ रेस्टफुल सर्विसेज का निर्माण एचटीटीपी पैकेट, आपको ग्राफ़कल-गो पैकेज उपयोग करने में आसान लगेगा।
अपने प्रोजेक्ट में ग्राफ़क्ल-गो पैकेज और इसकी निर्भरता जोड़ने के लिए इन कमांड को अपनी वर्किंग डायरेक्टरी में चलाएँ:
जाना github.com/graph-gophers/graphql प्राप्त करें-जाना
यहाँ एक साधारण ग्राफक्यूएल सर्वर शुरू करने का एक उदाहरण दिया गया है:
पैकेट मुख्य
आयात (
"लकड़ी का लट्ठा"
"नेट/एचटीटीपी"ग्राफ़िकल "github.com/graph-gophers/graphql-जाना"
"github.com/graph-gophers/graphql-जाना/relay"
)प्रकार जिज्ञासा struct{}
समारोह(_ *जिज्ञासा)नमस्ते()डोरी { वापस करना "हैलो वर्ल्ड!" }
समारोहमुख्य() {
स्कीमा उदाहरण: = `
प्रकार जिज्ञासा {
हैलो: स्ट्रिंग!
}
`
स्कीमा: = ग्राफ़िकल। MustParseSchema (स्कीमा उदाहरण, और क्वेरी {})
एचटीटीपी। हैंडल ("/ क्वेरी", और रिले। हैंडलर {स्कीमा: स्कीमा})
लकड़ी का लट्ठा। घातक (एचटीटीपी. सुनो और सेवा करो (":8080", शून्य))
}
नमस्ते की विधि जिज्ञासा स्ट्रक्चर ग्राफक्यूएल एंडपॉइंट के लिए एक रिज़ॉल्वर है जो हैलो वर्ल्ड लौटाता है। स्कीमा उदाहरण चर स्कीमा परिभाषा है, और सर्वर पोर्ट 8080 पर चलेगा एचटीटीपी पैकेज सुनो और परोसें तरीका।
3. थंडर पैकेज
गड़गड़ाहट ढांचा पहले संरचना को अपनाता है; आप एक ऐसी संरचना की घोषणा करते हैं जो आपके ग्राफक्यूएल स्कीमा को मॉडल करती है। यह उत्पन्न करता है ग्राफक्यूएल स्कीमा क्वेरी बैचिंग, लाइव क्वेरीज़, म्यूटेशन, सब्सक्रिप्शन और उदाहरण पीढ़ी को संभालने के लिए गो डेटा से।
थंडर टाइप बाइंडिंग और अन्य सुविधाओं के साथ टाइप सुरक्षा प्रदान करता है, जिसमें रिफ्लेक्शन-आधारित स्कीमा बिल्डिंग शामिल है, बिल्ट-इन समानांतर निष्पादन और बैचिंग, एक बिल्ट-इन ग्राफ़िकल एडिटर, और बड़े ग्राफ़क्यूएल के लिए स्प्लिट स्कीमा सर्वर।
थंडर पैकेज में एम्बेडिंग, इंटरफेस, उत्पन्न एनम या इनपुट, फेडरेशन, ओपन ट्रेसिंग या कस्टम त्रुटियों के लिए कोई कार्यक्षमता नहीं है। हालाँकि, यह अन्य लोकप्रिय पैकेजों की तुलना में उपयोग करने में सबसे आसान है और यदि आपके पास कोई ग्राफकॉल अनुभव नहीं है तो यह एक उत्कृष्ट शुरुआती पैकेज है।
थंडर पैकेज और इसकी निर्भरताओं को स्थापित करने के लिए आपको अपनी कार्यशील निर्देशिका के टर्मिनल में इस आदेश को चलाने की आवश्यकता होगी:
जाना github.com/samsarahq/thunder/graphql प्राप्त करें
आपको स्कीमा के लिए एक स्ट्रक्चर मॉडल घोषित करने, रिज़ॉल्वर लिखने और थंडर पैकेज के साथ एक साधारण ग्राफक्यूएल सर्वर शुरू करने के लिए सर्वर को तुरंत चालू करने की आवश्यकता होगी।
आयात (
"प्रसंग"
"नेट/एचटीटीपी"
"समय""github.com/samsarahq/thunder/graphql"
"github.com/samsarahq/thunder/graphql/graphiql"
"github.com/samsarahq/thunder/graphql/introspection"
"github.com/samsarahq/thunder/graphql/schemabuilder"
"github.com/samsarahq/thunder/reactive"
)प्रकार डाक struct {
शीर्षक डोरी
शरीर डोरी
समय पर बनाया गया। समय
}// सर्वर हमारा ग्राफकल सर्वर है।
प्रकार सर्वर struct {
पोस्ट [] पोस्ट
}// registerQuery रूट क्वेरी प्रकार को पंजीकृत करता है।
समारोह(एस * सर्वर)registerquery(स्कीमा * स्कीमबिल्डर. स्कीमा) {
ओबीजे: = स्कीमा. जिज्ञासा()obj. फील्डफंक ("पोस्ट", समारोह() []डाक {
वापस करना पद
})
}// रजिस्टर म्यूटेशन रूट म्यूटेशन प्रकार को पंजीकृत करता है।
समारोह(एस * सर्वर)रजिस्टरम्यूटेशन(स्कीमा * स्कीमबिल्डर. स्कीमा) {
ओबीजे: = स्कीमा. उत्परिवर्तन()obj. फील्डफंक ("इको", समारोह(तर्क struct{ संदेश डोरी })डोरी {
वापस करना तर्क। संदेश
})
}// रजिस्टरपोस्ट पोस्ट प्रकार को पंजीकृत करता है।
समारोह(एस * सर्वर)रजिस्टरपोस्ट(स्कीमा * स्कीमबिल्डर. स्कीमा) {
ओबीजे: = स्कीमा. ऑब्जेक्ट ("पोस्ट", पोस्ट {})obj. फील्डफंक ("उम्र", समारोह(सीटीएक्स संदर्भ। संदर्भ, पी *पोस्ट)डोरी {
प्रतिक्रियाशील। अमान्यबाद (सीटीएक्स, 5*समय। दूसरा)
वापस करना समय। चूंकि (पी। बनाया गया)। स्ट्रिंग ()
})
}// स्कीमा ग्राफक्ल स्कीमा बनाता है।
समारोह(एस * सर्वर)योजना() *ग्राफ़ql.योजना {
बिल्डर := स्कीमबिल्डर. न्यूस्कीमा ()
s.registerQuery (बिल्डर)
s.registerMutation (बिल्डर)
s.registerPost (बिल्डर)
वापस करना बिल्डर। मस्टबिल्ड ()
}समारोहमुख्य() {
// एक सर्वर को इंस्टेंट करें, एक सर्वर बनाएं, और पोर्ट 3030 पर स्कीमा परोसें।
सर्वर: = और सर्वर {
पद: [] पद {
{शीर्षक: "पहली पोस्ट!", मुख्य भाग: "मैं यहां पहले था!", बनाया गया: समय। अब()},
{शीर्षक: "ग्राफ़कल", मुख्य भाग: "क्या आपने थंडर के बारे में सुना?", CreatedAt: time. अब()},
},
}स्कीमा: = सर्वर.स्कीमा ()
आत्मनिरीक्षण। AddIntrospectionToSchema (स्कीमा)
// स्कीमा और ग्राफिकल का पर्दाफाश करें।
एचटीटीपी। हैंडल ("/ ग्राफ़कल", ग्राफ़कल. हैंडलर (स्कीमा))
एचटीटीपी। हैंडल ("/ ग्राफिकल /", http. स्ट्रिपप्रिफ़िक्स ("/ग्राफ़िकल/", ग्राफ़िकल. हैंडलर ()))
एचटीटीपी। सुनो और सेवा करो (":3030", शून्य)
}
डाक संरचना ग्राफक्यूएल स्कीमा के लिए मॉडल है, और सर्वर संरचना सर्वर उदाहरण है। registerquery, रजिस्टरम्यूटेशन, और रजिस्टरपोस्ट विधियाँ क्वेरीज़, म्यूटेशन और डेटा स्टोरेज के लिए रिज़ॉल्वर फ़ंक्शंस हैं।
मुख्य फ़ंक्शन पोर्ट पर ग्राफक्यूएल सर्वर से शुरू होता है 3030 और ग्राफक्यूएल संपादक।
आप बिल्ट-इन पैकेज के साथ ग्राफ़िकल एपीआई को गो में क्वेरी कर सकते हैं
ग्राफक्यूएल एचटीटीपी-आधारित है, और आप बिल्ट-इन के साथ ग्राफक्यूएल एपीआई का उपभोग कर सकते हैं एचटीटीपी पैकेज और रेस्टफुल एपीआई के समान अन्य पैकेज। गो के इकोसिस्टम में ऐसे पैकेज भी हैं जो आपको ग्राफक्यूएल एपीआई का तेजी से उपभोग करने की अनुमति देंगे।