graphql学习(一)

  1. 云栖社区>
  2. 博客>
  3. 正文

graphql学习(一)

eyunshu 2020-02-25 21:44:22 浏览175
展开阅读全文

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界面:
image

输入{hello},就可以在右侧看到hello world了
image

网友评论

登录后评论
0/500
评论
eyunshu
+ 关注