برنامه نویس فان | Fun Developer یک آدم ساده که عاشق برنامه نویسی و کد زدنه :) تلاش میکنه تا به بقیه کمک کنه. توسعه دهنده هسته لاراول و فضای اوپن سورس. فاندر پرانتز و کد نیوز.

GraphQL در گولنگ ابزاری قدرتمند برای ساخت APIهای مدرن و انعطافپذیر است. برای استفاده از GraphQL در گولنگ معمولاً از کتابخانه محبوب gqlgen استفاده میشود که امکان تعریف ساختار API بهصورت schema-first را فراهم میکند. در این فرآیند، ابتدا فایل schema.graphqls
شامل نوع دادهها و query/mutationها نوشته میشود، سپس gqlgen بهطور خودکار کدهای لازم را تولید میکند و شما تنها نیاز دارید منطق مربوط به هر resolver را پیادهسازی کنید. نتیجه کار یک API ساختاریافته، سریع و قابل توسعه خواهد بود که بهسادگی میتوانید آن را با کلاینتهایی مثل React یا Postman تست کنید.
1. نصب gqlgen
ابتدا باید gglgen
نصب کنید:
go install github.com/99designs/gqlgen@latest
پس از نصب پکیج، در پروژه خودتون دستور زیر بزنید تا در پروژه پکیج اضافه بشه:
go get github.com/99designs/gqlgen
2. راه اندازی gqlgen
دستور زیر در روت پروژه اجرا کنید. این دستور فایل های مخصوص پکیج رو تولید میکنه تا بتونید از پکیج در پروژه استفاده کنید:
gqlgen init
3. اضافه کردن Schema
در پوشه graph
یک فایل به نام book.graphqls
ایجاد کنید تا بتونیم Schema
های GraphQL
بسازیم:
type Book {
id: ID!
title: String!
author: String!
}
type Query {
allBooks: [Book!]!
book(id: ID!): Book
}
type Mutation {
createBook(title: String!, author: String!): Book
}
4. تولید کد برای GraphQL
برای تولید کد نیاز داریم که کامند زیر اجرا کنیم تا کد های مربوط به GraphQL
ساخته بشن:
gqlgen
با اجرا این کد:
- فایل
model/models_gen.go
ساخته یا آپدیت میشه. - فایل
generated.go
آپدیت میشه تا با Schema ها هماهنگ بشه. - فایل
resolver.go
آپدیت میشه.
5. پیاده سازی Resolver
برای اضافه کردن Query و Mutation ها شما نیاز دارید که در فایل resolver.go
، پیاده سازی خودتون انجام بدید:
package graph
import "github.com/sanda0/graphql_example/graph/model"
// Resolver struct to hold data
type Resolver struct {
books []*model.Book
}
با دستور gqlgen
فایل book.resolvers.go
ساخته میشه، حالا درونش باید اون عملیات اصلی پیاده سازی کنیم:
package graph
import (
"context"
"fmt"
"math/rand"
"strconv"
"github.com/milwad-dev/gograph/graph/model"
)
// CreateBook is the resolver for the createBook field.
func (r *mutationResolver) CreateBook(ctx context.Context, title string, author string) (*model.Book, error) {
book := &model.Book{
ID: strconv.Itoa(rand.Intn(1000)),
Title: title,
Author: author,
}
r.books = append(r.books, book)
return book, nil
}
// AllBooks is the resolver for the allBooks field.
func (r *queryResolver) AllBooks(ctx context.Context) ([]*model.Book, error) {
return r.books, nil
}
// Book is the resolver for the book field.
func (r *queryResolver) Book(ctx context.Context, id string) (*model.Book, error) {
for _, book := range r.books {
if book.ID == id {
return book, nil
}
}
return nil, fmt.Errorf("book not found")
}
// Mutation returns MutationResolver implementation.
func (r *Resolver) Mutation() MutationResolver { return &mutationResolver{r} }
// Query returns QueryResolver implementation.
func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
type mutationResolver struct{ *Resolver }
type queryResolver struct{ *Resolver }
6. راه اندازی سرور
برای اینکه سرور GraphQL بخواهید راه بندازید، باید توی فایل main.go
سرور راه اندازی کنید:
package main
import (
"log"
"net/http"
"github.com/99designs/gqlgen/graphql/handler"
"github.com/99designs/gqlgen/graphql/playground"
"github.com/milwad-dev/gograph/graph"
)
func main() {
// Set up GraphQL server
srv := handler.NewDefaultServer(graph.NewExecutableSchema(graph.Config{Resolvers: &graph.Resolver{}}))
// Handlers
http.Handle("/", playground.Handler("GraphQL Playground", "/query"))
http.Handle("/query", srv)
// Start server
log.Println("Server is running on http://localhost:8080/")
log.Fatal(http.ListenAndServe(":8080", nil))
}
بعد با دستور زیر اپلیکیشن اجرا کنید:
go run main.go
بعد از اجرا شما در مسیر http://localhost:8080
میتونید از GraphQL استفاده کنید:
اولین نفر باش که نظر ثبت میکنی :) یعنی یه کامنت به ما نمیرسه 😁