gqlengine 是凯斐德科技开源的 一个graphql golang 解决方案(服务端框架),基于 graphql-go,但无需繁杂的配置语句,也不像 gopher-graphql/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 支持图形形式观察)