Wener笔记故事指南graphql-go/graphql
- graphql-go/graphql 是什么?
- Golang GraphQL 解析、执行库
- Code First - 先 Go 代码,然后生成 GraphQL
- 通过 struct 构建内容生成 graphql schema
- 通过 struct 构建 resolver 和类型字段处理
- 构建过程和执行过程可以使用 thunk 模式 - 返回函数,用到的时候再执行
- 因为存在循环依赖,延迟执行也能进行其他优化
- resolve -
func(p ResolveParams) (interface{}, error)
- DefaultResolveFn - field 默认 resolve
- 支持 map 和 struct - 不支持 Embed struct
- 字段比较忽略大小写
- source 也可以实现 FieldResolver - 这样可以交由返回结果判断如何 resolve
- 执行过程
- 收集字段
- 执行字段
- resolve 字段
- 计算值 - 处理 promise、序列化 scalars、执行下级字段
- thunk 延迟
- null 检查
- list 展开
- union 和 interface 实际类型检测
- object 展开 - 向下求值
- 扩展
ParseDidStart(context.Context) (context.Context, ParseFinishFunc)
ValidationDidStart(context.Context) (context.Context, ValidationFinishFunc)
ExecutionDidStart(context.Context) (context.Context, ExecutionFinishFunc)
ResolveFieldDidStart(context.Context, *ResolveInfo) (context.Context, ResolveFieldFinishFunc)