Мне интересно использовать GraphQL, и я только начал экспериментировать с ним.
В учебнике по GraphQL можно увидеть следующую цитату:
Каждое поле в схеме GraphQL поддерживается определителем.
Но если вы посмотрите на gqlgen (это библиотека golang для построения серверов GraphQL) Пример to , который использует следующую схему:
...
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) {
Это ожидаемое поведение, чтобы не генерировать распознаватели для каждого поля (но вместо этого для каждого запроса)?