是什么启发了我写这篇文章
GraphQL 正在我的实习网站上使用,所以我想我实际上会尝试在手边运行它。
它是根据原始教程和作为参考的文章内容编写的。
这篇文章是Go Conference mini 2022 Autumn IN仙台它也用于公告中
这篇文章写了什么
如何使用 gqlgen 设置服务器
客户端详解
什么是 GraphQL
- 由 Facebook 创建的 OSS
- 为 API 设计的查询语言
- 查询现有数据的运行时
客户端
↓ 请看幻灯片。它还描述了 GraphQL 的优缺点。
什么是gqlgen
- gqlgen 是一个用于轻松构建 GraphQL 服务器的 Go 库。
- gqlgen 基于模式优先的方法
- Gqlgen 更喜欢类型安全
- gqlgen 启用 Codegen
让我们尝试一下
设置服务器
https://github.com/99designs/gqlgen
1.创建工作目录并初始化
mkdir gqlgen-server cd gqlgen-server go mod init gqlgen-server2.将
github.com/99designs/gqlgen添加到tools.goprintf '// +build tools package tools import (_ "github.com/99designs/gqlgen" _ "github.com/99designs/gqlgen/graphql/introspection")' | gofmt > tools.go go mod tidy3.初始化gqlgen设置并生成模型
go run github.com/99designs/gqlgen init4.启动gqlgen服务器
go run server.go您现在已经启动了服务器。
如果输出看起来像 ↓ ,你就成功了!
http://localhost:8080/当您访问时,您会像↓一样跳转到客户端屏幕。
在这里,您可以编写 GraphQL 请求query和mutation来发出请求。目录结构
├── go.mod ├── go.sum ├── gqlgen.yml - gqlgen の設定ファイル。生成されたコードを制御する ├── graph │ ├── generated - 生成されたランタイムのみが含まれるパッケージ │ │ └── generated.go │ ├── model - すべての graph model 用のパッケージ │ │ └── models_gen.go │ ├── resolver.go - root graph resolver タイプ。このファイルは再生成されない │ ├── schema.graphqls - スキーマが書かれているファイル。好きなようにいじって大丈夫 │ └── schema.resolvers.go - schema.graphql の resolver 実装。 └── server.go - エントリーポイント。カスタマイズできる练习部分
看看文件
应该生成像↓ 这样的模式。
架构.graphqlstype Todo { id: ID! text: String! done: Boolean! user: User! } type User { id: ID! name: String! } type Query { todos: [Todo!]! } input NewTodo { text: String! userId: String! } type Mutation { createTodo(input: NewTodo!): Todo! }要更改的文件
图/resolver.gotype Resolver struct{ // ↓ の一行を追加 todos []*model.Todo }可能存在无法正常导入的包,请检查是否报错。
换个样子↓
实现自动生成的解析器函数的主体。
对于 CreateTodo,我们使用 math.rand 包返回一个带有随机生成 ID 的 Todo,并将其存储在内存中的 Todo 列表中。图/schema.resolvers.gofunc (r *mutationResolver) CreateTodo(ctx context.Context, input model.NewTodo) (*model.Todo, error) { todo := &model.Todo{ Text: input.Text, ID: fmt.Sprintf("T%d", rand.Int()), User: &model.User{ID: input.UserID, Name: "user " + input.UserID}, } r.todos = append(r.todos, todo) return todo, nil } func (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) { return r.todos, nil }现在您已准备好将请求发送到服务器。
再次启动服务器
go run server.go创建待办事项
http://localhost:8080/在这里写下您的要求
要求
mutation createTodo { createTodo(input: { text: "todo", userId: "3" }) { user { id } text done } }回复
{ "data": { "createTodo": { "user": { "id": "3" }, "text": "todo", "done": false } } }得到待办事项
http://localhost:8080/在这里写下您的要求
要求
query findTodos { todos { id text done user { name id } } }回复
{ "data": { "todos": [ { "id": "T5577006791947779410", "text": "todo", "done": false, "user": { "name": "user 3", "id": "3" } } ] } }就这样! !
在最后
我第一次为qiita写了一篇文章。我学会了整理我的知识!我想如果我能在这种情况下输出就好了。
另外,我希望这篇文章对您有所帮助。我想去博多。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308629694.html