Graphql提取数据进行分页

时间:2018-06-28 07:02:42

标签: graphql apollo apollo-server graphql-tools

我有以下模式

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

Post {
    title: String!
    description: String
}

在查询中

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

在解析器中,我定义了Query -> useruser -> 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 :(得分:1)

有两种方法可以解决此问题:

  1. 创建一个中间类型,例如专门用于UserRelations 为了提供这些类型的入口点 无需通过用户查询。这是最简单的方法 我以前做过,但是弄乱数据感觉很讨厌 以这种方式进行建模。
  2. 进行设置,以便每当您解析User时,您都会检查哪些字段是 被要求。如果您只要求不需要的字段 加载用户(即仅限关系),返回一个虚拟对象,而不是获取数据。 这涉及更多,因为这意味着查看您的AST字段 解析器,但是对此感到满意是使用GraphQL进行大多数性能优化的关键。