gqlengine 是一个 GraphQL golang 解决方案(服务端框架),基于 graphql-go,但无需繁杂的配置语句,也无需二次编辑 schema 和 resolver(两次编写业务代码),仅通过 go-reflection,自动解析 resolver function,并自动创建关联的 graphql 类型。如以下代码:
package main
import (
"net/http"
"github.com/gqlengine/gqlengine"
)
type MyInfo struct {
gqlengine.IsGraphQLObject `gqlDesc:"my info"`
SaySomething string
}
func MySimpleQuery() error {
panic("not implemented")
}
func main() {
engine := gqlengine.NewEngine(gqlengine.Options{
Tracing: true, // enable tracing extensions
})
// register your queries, mutations and subscriptions
engine.NewQuery(MySimpleQuery)
// do NOT forget init the engine
if err := engine.Init(); err != nil {
panic(err)
}
// serve for HTTP
http.HandleFunc("/api/graphql", engine.ServeHTTP)
if err := http.ListenAndServe(":8000", nil); err != nil {
panic(err)
}
}
实际仅需要 engine.NewQuery(MySimpleQuery) 即可,gqlengine 会自动查找该 func 的入参和出参,推导出对应的 graphql 类型,比如 MySimpleQuery 返回了 MyInfo 类型,MyInfo 结构里标记该类型是 GraphQL Object,gqlengine 在 Init() 中就自动创建了该 Object。
GQLEngine 目前已经支持各类 GraphQL 类型的 reflection,同时还具备以下强大特性:
- Websocket Subscription 支持(继承了 Websocket,使用者无需配置)
- Multipart Upload (支持通过 graphql 上传任意多个图片、文件等)
- Tracing extensions(支持对 graphql 调用层次/链路跟踪,结合 playground 支持图形形式观察)
评论