Golang的 GraphQL 库主要有两个:
Graphql-go/graphql: Code-First 模式的库,无需编写 GraphQL SDL,通过 Go 自带的结构体来描述 GraphQL 中的数据类型,由库本身来转换为 GraphQL Schema。
graph-gophers/graphql-go: Schema-First 模式的库,需要先写好 SDL,然后在 Go 中写相应的字段的解析函数。
以上的话什么意思,我也不是很明白,反正选择星星更多的没错,所以选择第一个.
package main
import (
"fmt"
"github.com/graphql-go/graphql"
)
func main() {
fmt.Println(&graphql.Schema{})
}
编译后控制台应该输出:
API server listening at: 127.0.0.1:11559
&{map[] [] <nil> <nil> <nil> map[] map[] []}
Process exiting with code: 0
首先确定了import是正确无误了.
初学都得来一段"hello, world". 官网上的hello world是控制台输出的,我们要的是可以从浏览器输出.
很多地方都是配合gin框架做,其实官网上有提供handler库,配合标准库net/http就可以了.
package main
import (
"net/http"
"github.com/graphql-go/graphql"
"github.com/graphql-go/handler"
)
// 处理查询请求
var queryHello = graphql.Field{
Name: "QueryHello",
Description: "Query Hello",
Type: graphql.String,
// Resolve是一个处理请求的函数,具体处理逻辑可在此进行
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
return "hello,world", nil
},
}
// 定义根查询节点
var rootQuery = graphql.NewObject(graphql.ObjectConfig{
Name: "RootQuery",
Description: "Root Query",
Fields: graphql.Fields{
"hello": &queryHello, // 这里的hello,你可以试着改变一下,比如改成test,看看GraphiQL哪里会有变化
},
})
// 定义Schema用于http handler处理
var schema, _ = graphql.NewSchema(graphql.SchemaConfig{
Query: rootQuery, // 查询用
Mutation: nil, // 需要通过GraphQL做增删改,可以定义Mutation
})
// main
func main() {
h := Register()
http.Handle("/graphql", h)
http.ListenAndServe(":8080", nil)
}
// 初始化handler
func Register() *handler.Handler {
h := handler.New(&handler.Config{
Schema: &schema,
Pretty: true,
GraphiQL: true,
})
return h
}
打开浏览器,地址栏输入http://127.0.0.1:8080/graphql,就可以看到GraphiQL界面:
输入{hello},就可以在右侧看到hello world了