为何在gqlgen中要将标量类型映射为多个模型类型?
为什么要在gqlgen的models配置中为标量类型指定多个模型类型?
你提到的没错——生成器确实只会用列表里的第一个类型来定义模型字段的类型,但后面的类型承担着两个关键作用:
- 输入兼容解析:当客户端传入的参数类型匹配列表中后续的类型时,gqlgen会自动完成类型转换。比如给
ID配置了Int/Int64类型后,客户端不管传字符串格式还是数字格式的ID,都能被正确解析为服务端定义的graphql.ID类型,不用额外写解析逻辑。 - 输出自动适配:当服务端返回的字段值是列表中后续的类型时,gqlgen会自动把它转换为第一个指定的模型类型。比如你定义
Int的主类型是graphql.Int,但服务端实际返回了Int64类型的值,gqlgen会自动转成graphql.Int输出给客户端,省去手动转换的步骤。
拿你给出的配置举个实际场景:
models: ID: model: - github.com/99designs/gqlgen/graphql.ID - github.com/99designs/gqlgen/graphql.Int - github.com/99designs/gqlgen/graphql.Int64 - github.com/99designs/gqlgen/graphql.Int32 Int: model: - github.com/99designs/gqlgen/graphql.Int - github.com/99designs/gqlgen/graphql.Int64 - github.com/99designs/gqlgen/graphql.Int32 Int64: model: - github.com/99designs/gqlgen/graphql.Int64
这里ID配置多个整数类型,就是为了兼容客户端传入的各种数字格式ID,同时服务端从数据库拿到的int64/int32类型主键,也能自动转成ID类型输出;Int配置后续的整数类型,则是让服务端返回的不同精度整数都能自动适配成graphql.Int。
总结来说:第一个类型是代码生成时的模型字段类型,后面的类型是运行时自动兼容转换的类型列表,核心作用就是减少手动类型转换的工作量,提升接口的兼容性。
内容的提问来源于stack exchange,提问作者JohnDoe
相关产品推荐
相关产品推荐

