Graphql данные для разбивки на страницы - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующая схема

User {
    username: String!
    name: String!
    posts(page: Int!): [Post]
}

Post {
    title: String!
    description: String
}

И в запросе

type Query {
    user(username: String!): User
}

В резольверах я определил Query -> user, а также user -> posts И когда я извлекаю данные, которые я использую:

{
    user(username: 'pewpewlasers'){
        username
        name
        posts(page: 1){
            title
            description
        }
    }
}

Отлично работает. Теперь мой вопрос заключается в том, как эффективно вытащить вторую страницу в ситуации бесконечной прокрутки (с кнопкой «Загрузить больше» в конце). Я мог бы использовать:

{
    user(username: 'pewpewlasers'){
        username
        name
        posts(page: 2){
            title
            description
        }
    }
}

Но подтягивание пользователя снова кажется ненужным, мне просто нужно больше постов для загрузки. Есть ли встроенный способ, которым graphql обрабатывает это? Или я должен определить отдельный posts(page: Int!, username: String!) запрос

1 Ответ

0 голосов
/ 28 июня 2018

Есть несколько способов приблизиться к этому:

  1. Создайте промежуточный тип, например, UserRelations с целью обеспечения точки входа для этих типов запросы без необходимости проходить через пользователя. Это самый простой способ, и я делал это раньше, но это неприятно возиться с данными моделирование таким образом.
  2. Сделайте так, чтобы всякий раз, когда вы решаете User, вы проверяли, какие поля запрашивается Если вы запрашиваете только поля, которые не требуют загружая пользователя (т.е. только для отношений), возвращайте фиктивный объект вместо извлечения данных. Это более сложный процесс, потому что это означает, что нужно смотреть на поля AST в вашем распознаватели, но освоение этого является ключом к большинству оптимизаций производительности с GraphQL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...