gqlengine  - graphql golang 解决方案

id_sed 2020-02-07 12:38:35

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 支持图形形式观察)
    公告

    《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

    课程地址:https://www.shiyanlou.com/courses/1436
    9折优惠邀请码: ZHwfIjb1

    该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。