Go:samsarahq/thunder(支持实时查询与批处理)
graphql-github-io-zh-Hans生态项目与库
Go:samsarahq/thunder(支持实时查询与批处理)
项目简介
samsarahq/thunder 是一个基于 Go 语言实现的 GraphQL 服务端库,旨在提供一套简洁高效的开发体验。它内置了 schema 自动构建、实时查询(Live Queries)以及查询批处理(Batching)等核心能力,适用于需要构建高性能、具备实时数据推送能力的 GraphQL API 场景。
核心特性
- 易用的 Schema 构建:通过 Go 结构体与方法定义即可快速生成 GraphQL Schema,无需手写冗长的 SDL。
- 实时查询(Live Queries):内置对实时数据更新的支持,客户端可以订阅查询结果的变化,并自动接收增量更新。
- 批处理(Batching):自动将同一数据加载器(Loader)在单次请求内的多次数据获取合并为一次底层调用,减少数据库或外部 API 的压力,显著提升查询性能。
- 面向 Go 生态优化:充分利用 Go 的并发模型与类型系统,与现有 Go 服务无缝集成。
快速开始
以下示例展示如何使用 thunder 构建一个简单的 GraphQL 服务:
go
package main
import (
"context"
"fmt"
"net/http"
"github.com/samsarahq/thunder/graphql"
"github.com/samsarahq/thunder/graphql/introspection"
"github.com/samsarahq/thunder/graphql/schemabuilder"
"github.com/samsarahq/thunder/graphql/serve"
)
type User struct {
ID int64
Name string
}
// 定义 Schema
func buildSchema() *graphql.Schema {
builder := schemabuilder.NewSchema()
// 定义对象类型
builder.Object("User", User{}, func(obj *schemabuilder.Object) {
obj.Field("id", func(u *User) int64 { return u.ID })
obj.Field("name", func(u *User) string { return u.Name })
})
// 定义查询根节点
query := builder.Query()
query.Field("user", func(ctx context.Context, args struct{ ID int64 }) (*User, error) {
// 模拟数据查询
return &User{ID: args.ID, Name: fmt.Sprintf("User %d", args.ID)}, nil
})
schema := builder.MustBuild()
introspection.AddIntrospectionToSchema(schema) // 可选:启用 introspection
return schema
}
func main() {
schema := buildSchema()
http.Handle("/graphql", serve.Handler(schema))
http.Handle("/graphql/query", serve.Handler(schema))
fmt.Println("GraphQL server listening on :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
panic(err)
}
}
使用场景
- 需要实时更新数据(如通知、动态信息流)的 Web 或移动端应用。
- 面对 N+1 查询问题,希望简化数据加载逻辑并提升 API 吞吐量的服务端项目。
- 偏好通过 Go 代码维护 GraphQL Schema,并希望获得类型安全的开发体验的团队。
项目资源
- GitHub 仓库:https://github.com/samsarahq/thunder
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
