【发布时间】:2026-01-21 16:25:01
【问题描述】:
我对使用 GraphQL 很感兴趣,并且刚刚开始尝试使用它。
在 GraphQL tutorial 中,可以看到以下引用:
GraphQL 架构中的每个字段都由解析器支持。
但是,如果您查看 gqlgen(这是一个用于构建 GraphQL 服务器的 golang 库)todo example,它使用以下架构:
...
type MyQuery {
todo(id: ID!): Todo
lastTodo: Todo
todos: [Todo!]!
}
type MyMutation {
createTodo(todo: TodoInput!): Todo!
updateTodo(id: ID!, changes: Map!): Todo
}
type Todo {
id: ID!
text: String!
done: Boolean!
}
...
它实际上使用了 3 个自动生成的解析器(即,每个 查询 有 1 个,而不是一个字段):
func (r *QueryResolver) Todo(ctx context.Context, id int) (*Todo, error) {
func (r *QueryResolver) LastTodo(ctx context.Context) (*Todo, error) {
func (r *QueryResolver) Todos(ctx context.Context) ([]*Todo, error) {
不为每个字段(而是为每个查询)自动生成解析器是预期的行为吗?
【问题讨论】:
-
这看起来像
MyQuery类型中的每个字段都有一个解析器,它恰好是*查询类型(但除此之外是普通的 GraphQL 对象类型)。