Go (Golang) के लिए GraphQL लाइब्रेरी — API बनाने का शक्तिशाली उपकरण
GraphQL एक API के लिए क्वेरी भाषा है जो क्लाइंट को केवल वही डेटा माँगने की अनुमति देती है जिसकी उन्हें वास्तव में आवश्यकता है। Go (Golang) इकोसिस्टम में, GraphQL के साथ काम करने के लिए सबसे लोकप्रिय लाइब्रेरी में से एक gqlgen (GraphQL Go Generate) है। यह लाइब्रेरी न्यूनतम बॉयलरप्लेट कोड के साथ टाइप-सेफ GraphQL सर्वर बनाने की अनुमति देती है। इस लेख में, हम gqlgen, इसकी स्थापना, कॉन्फ़िगरेशन और उपयोग के उदाहरणों पर विस्तार से चर्चा करेंगे।
gqlgen क्या है?
gqlgen Go के लिए एक कोड जनरेटर है जो आपकी GraphQL स्कीमा के आधार पर स्वचालित रूप से रिज़ॉल्वर और प्रकार बनाता है। मुख्य लाभ:
- टाइप सुरक्षा — सभी प्रकार संकलन चरण में जाँचे जाते हैं
- न्यूनतम बॉयलरप्लेट कोड — लाइब्रेरी आपके लिए अधिकांश कोड उत्पन्न करती है
- लचीलापन — सब्सक्रिप्शन, म्यूटेशन और जटिल क्वेरी के लिए समर्थन
- प्रदर्शन — Go की विशेषता वाली उच्च गति
gqlgen की स्थापना
आरंभ करने के लिए, लाइब्रेरी और कमांड लाइन उपयोगिता स्थापित करें:
go get github.com/99designs/gqlgengo run github.com/99designs/gqlgen initinit कमांड schema.graphqls, gqlgen.yml फ़ाइलों और जनरेटेड कोड के साथ एक बुनियादी प्रोजेक्ट संरचना बनाएगा।
प्रोजेक्ट संरचना
आरंभीकरण के बाद, आपको निम्नलिखित संरचना प्राप्त होगी:
my-graphql-app/├── gqlgen.yml # जनरेटर कॉन्फ़िगरेशन├── graph/│ ├── schema.graphqls # GraphQL स्कीमा│ ├── resolver.go # रिज़ॉल्वर (आपका कोड)│ └── models_gen.go # जनरेटेड मॉडल (संपादित न करें)├── server.go # प्रवेश बिंदु└── go.modGraphQL स्कीमा लिखना
एक सरल ब्लॉग के लिए schema.graphqls फ़ाइल का उदाहरण:
type Query { posts: [Post!]! post(id: ID!): Post}
type Mutation { createPost(input: PostInput!): Post! deletePost(id: ID!): Boolean!}
type Post { id: ID! title: String! content: String! author: String! createdAt: Time!}
input PostInput { title: String! content: String! author: String!}
scalar Timeकोड जनरेशन
स्कीमा का वर्णन करने के बाद, निष्पादित करें:
go run github.com/99designs/gqlgen generateयह प्रकार और रिज़ॉल्वर इंटरफ़ेस के साथ models_gen.go और generated.go फ़ाइलें बनाएगा।
रिज़ॉल्वर का कार्यान्वयन
अब resolver.go में तर्क लागू करने की आवश्यकता है:
package graph
import ( "context" "time")
// डेटा मॉडलtype Post struct { ID string `json:"id"` Title string `json:"title"` Content string `json:"content"` Author string `json:"author"` CreatedAt time.Time `json:"createdAt"`}
// मेमोरी में स्टोरेजvar posts = []*Post{ { ID: "1", Title: "GraphQL का परिचय", Content: "GraphQL एक क्वेरी भाषा है...", Author: "इवान पेट्रोव", CreatedAt: time.Now(), },}
// Query.posts के लिए रिज़ॉल्वरfunc (r *queryResolver) Posts(ctx context.Context) ([]*Post, error) { return posts, nil}
// Query.post के लिए रिज़ॉल्वरfunc (r *queryResolver) Post(ctx context.Context, id string) (*Post, error) { for _, post := range posts { if post.ID == id { return post, nil } } return nil, nil}
// Mutation.createPost के लिए रिज़ॉल्वरfunc (r *mutationResolver) CreatePost(ctx context.Context, input PostInput) (*Post, error) { newPost := &Post{ ID: fmt.Sprintf("%d", len(posts)+1), Title: input.Title, Content: input.Content, Author: input.Author, CreatedAt: time.Now(), } posts = append(posts, newPost)