GraphQL और Go का परिचय
GraphQL Facebook द्वारा विकसित API के लिए एक क्वेरी भाषा है। REST के विपरीत, जहां प्रत्येक एंडपॉइंट एक निश्चित डेटा संरचना लौटाता है, GraphQL क्लाइंट को केवल उन फ़ील्ड को अनुरोध करने की अनुमति देता है जिनकी उसे आवश्यकता होती है। यह अनुरोधों की संख्या और स्थानांतरित डेटा की मात्रा को कम करता है। Go (Golang) अपनी गति, स्थैतिक टाइपिंग और अंतर्निहित समवर्ती समर्थन के कारण उच्च-प्रदर्शन API बनाने के लिए एक उत्कृष्ट विकल्प है।
इस ट्यूटोरियल में, हम पुस्तकों की सूची प्रबंधित करने के लिए Go में एक सरल GraphQL API बनाएंगे। आप सीखेंगे कि सर्वर कैसे सेट करें, स्कीमा कैसे परिभाषित करें, रिज़ॉल्वर कैसे लिखें और क्वेरी और म्यूटेशन कैसे निष्पादित करें।
प्रोजेक्ट सेटअप और लाइब्रेरी स्थापित करना
Go मॉड्यूल आरंभ करना
प्रोजेक्ट के लिए एक नई निर्देशिका बनाएं और मॉड्यूल आरंभ करें:
mkdir graphql-go-tutorialcd graphql-go-tutorialgo mod init graphql-go-tutorialgraphql-go लाइब्रेरी स्थापित करना
हम लोकप्रिय लाइब्रेरी graphql-go/graphql का उपयोग करेंगे। इसे कमांड का उपयोग करके स्थापित करें:
go get github.com/graphql-go/graphqlgo get github.com/graphql-go/handlerपहली लाइब्रेरी GraphQL कोर प्रदान करती है, और दूसरी वेब सर्वर के साथ एकीकरण के लिए HTTP हैंडलर प्रदान करती है।
डेटा संरचना और GraphQL स्कीमा बनाना
Book प्रकार परिभाषित करना
एक main.go फ़ाइल बनाएं और पुस्तक डेटा संरचना और संबंधित GraphQL प्रकार को परिभाषित करके शुरू करें:
package main
import ( "github.com/graphql-go/graphql" "github.com/graphql-go/handler" "net/http")
// Book — पुस्तक डेटा संरचनाtype Book struct { ID string `json:"id"` Title string `json:"title"` Author string `json:"author"` Year int `json:"year"`}
// पुस्तक के लिए GraphQL प्रकार परिभाषित करेंvar bookType = graphql.NewObject( graphql.ObjectConfig{ Name: "Book", Fields: graphql.Fields{ "id": &graphql.Field{Type: graphql.String}, "title": &graphql.Field{Type: graphql.String}, "author": &graphql.Field{Type: graphql.String}, "year": &graphql.Field{Type: graphql.Int}, }, },)रूट क्वेरी (Query) बनाना
आइए पुस्तकों का इन-मेमोरी स्टोरेज और सूची और एक पुस्तक प्राप्त करने के लिए रूट क्वेरी जोड़ें:
// डेटाबेस का अनुकरणvar books = []Book{ {ID: "1", Title: "युद्ध और शांति", Author: "लियो टॉल्स्टॉय", Year: 1869}, {ID: "2", Title: "अपराध और दंड", Author: "फ्योदोर दोस्तोयेव्स्की", Year: 1866}, {ID: "3", Title: "मास्टर और मार्गरीटा", Author: "मिखाइल बुल्गाकोव", Year: 1967},}
// रूट क्वेरीvar queryType = graphql.NewObject( graphql.ObjectConfig{ Name: "Query", Fields: graphql.Fields{ "books": &graphql.Field{ Type: graphql.NewList(bookType), Resolve: func(p graphql.ResolveParams) (interface{}, error) { return books, nil }, }, "book": &graphql.Field{ Type: bookType, Args: graphql.FieldConfigArgument{ "id": &graphql.ArgumentConfig{Type: graphql.String}, }, Resolve: func(p graphql.ResolveParams) (interface{}, error) { id, _ := p.Args["id"].(string) for _, book := range books { if book.ID == id { return book, nil } } return nil, nil }, }, }, },)म्यूटेशन (Mutation) जोड़ना
म्यूटेशन डेटा को बदलने की अनुमति देते हैं। आइए नई पुस्तकें जोड़ने की क्षमता जोड़ें:
// पुस्तक जोड़ने के लिए म्यूटेशनvar mutationType = graphql.NewObject(