Если бы у меня был
type Post {
title: String!
body: String!
author: User!
}
type User {
name: String
posts: [Post!]!
}
type Query {
users: [User!]!
}
Что возвращает распознаватель users? Я понимаю, что он может вернуть пустой список, но когда он возвращает заполненный список, я не знаю, как с этим справиться. Интуитивно мне кажется, что он должен быть бесконечным из-за того, что пользователь содержит список своих сообщений, каждый из которых будет содержать пользователя и т. д. Ясно, что это не может быть так, так что делает возвращает преобразователь для Query.users?


Решатель возвращает только то, что вы вернули. Он не создается автоматически на основе типов. Что он делает: он сопоставляет типы объекта в соответствии с тем, что вы разрешаете.
В этом случае ваш преобразователь вернет список пользователей, и у каждого пользователя есть имя и список сообщений, а у каждого сообщения есть заголовок, тело и автор.
И да, кажется, что он может создавать бесконечный поток данных, но именно эта идея график заключается в том, что все данные связаны с его отношениями и наоборот.
Вы можете представить возвращаемые данные примерно так:
data: {
users: [
{
name: "user 1",
posts: [
{
title: "post 1",
body: "post body",
author: {
name: "user 1",
posts: [
{
title: "post 1",
body: "post body",
author: {
name: "user 1",
posts: [
{
.....
}
]
}
}
]
}
}
]
},
{
name: "user 2",
posts: [
{
title: "post 2",
body: "post body",
author: {
name: "user 2",
posts: [
{
title: "post 2",
body: "post body",
author: {
name: "user 2",
posts: [
{
.....
}
]
}
}
]
}
}
]
}
]
}
И снова GraphQL возвращает только те данные, которые вы просите вернуть. Итак, если вам нужны только пользователи и публикуются сообщения, запрос будет примерно таким:
query getUsers {
users {
name
posts {
title
body
}
}
}
В этом случае будут возвращены только пользователи и их сообщения, а не авторы.
Спасибо. Теперь это имеет смысл, когда я оглядываюсь на документацию и вижу, что в примерах всегда передается аргумент
infoв ORM.