3

我正在使用https://developer.github.com/v4/

我有一个像这样的巨大查询:

query ($login: String!, $first: Int, $after: String) {
  user (login: $login){
    avatarUrl
    login
    name,
    followers(first: $first, after:$after) { 
      edges{
        cursor
        node{
          id
          name
          login
          avatarUrl
        }
      }
      totalCount
    },
    repositories(first: $first) {
      edges{
        cursor
        node{
          id
          name
        }
      }
      totalCount
    }
  }
}

但我认为从服务器查询大量数据是不好的。

我有followersrepositories页面。所以我认为将这个巨大的查询拆分为小查询会更好。

这是小查询:

追随者查询:

query($login: String!, $first: Int, $after: String) {
    user(login: $login) {
      followers(first: $first, after: $after) {
        edges {
          cursor
          node {
            id
            name
            login
            avatarUrl
          }
        }
        totalCount
      }
    }
  }

仓库查询:

query($login: String!, $first: Int, $after: String) {
    user(login: $login) {
      repositories(first: $first, after: $after) {
        nodes {
          id
          name
        }
        totalCount
      }
    }
  }

用户查询:

query($login: String!, $first: Int) {
    user(login: $login) {
      avatarUrl
      login
      name
    }
  }

我正确吗?有必要这样做吗?这种情况的最佳做法是什么?是否有任何文档可以教人们如何处理这个问题或告诉人们最佳实践?

4

1 回答 1

4

您可以将查询吐出到Fragments中,这样您仍然只会触发一个请求并且拥有更小的"queries". 像这样的东西:

追随者的片段:

fragment followers on User {
    followers(first: $first, after: $after) { 
      edges{
        cursor
        node{
          id
          name
          login
          avatarUrl
        }
      }
      totalCount
    },
}

存储库的片段:

fragment repositories on User {
  repositories(first: $first) {
      edges{
        cursor
        node{
          id
          name
        }
      }
      totalCount
    }
}

将它们全部放在查询中:

query ($login: String!, $first: Int, $after: String) {
  user (login: $login){
    avatarUrl
    login
    name
    ...followers
    ...repositories
  }
}
于 2018-07-13T08:36:12.410 回答