graphql

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)