Что возвращает преобразователь GraphQL для объекта с отношением?

Если бы у меня был

type Post {
  title: String!
  body: String!
  author: User!
}
type User {
  name: String
  posts: [Post!]!
}
type Query {
  users: [User!]!
}

Что возвращает распознаватель users? Я понимаю, что он может вернуть пустой список, но когда он возвращает заполненный список, я не знаю, как с этим справиться. Интуитивно мне кажется, что он должен быть бесконечным из-за того, что пользователь содержит список своих сообщений, каждый из которых будет содержать пользователя и т. д. Ясно, что это не может быть так, так что делает возвращает преобразователь для Query.users?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
320
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решатель возвращает только то, что вы вернули. Он не создается автоматически на основе типов. Что он делает: он сопоставляет типы объекта в соответствии с тем, что вы разрешаете.

В этом случае ваш преобразователь вернет список пользователей, и у каждого пользователя есть имя и список сообщений, а у каждого сообщения есть заголовок, тело и автор.

И да, кажется, что он может создавать бесконечный поток данных, но именно эта идея график заключается в том, что все данные связаны с его отношениями и наоборот.

Вы можете представить возвращаемые данные примерно так:

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.

hxtk 19.06.2018 22:56

Другие вопросы по теме