graphql,将大型查询拆分为小型查询

graphql,将大型查询拆分为小型查询,graphql,graphql-js,github-graphql,Graphql,Graphql Js,Github Graphql,我正在使用 我有一个巨大的疑问,像这样: query ($login: String!, $first: Int, $after: String) { user (login: $login){ avatarUrl login name, followers(first: $first, after:$after) { edges{ cursor node{ id name

我正在使用

我有一个巨大的疑问,像这样:

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
    }
  }
}
但我认为从服务器查询大量数据是不好的

我有
追随者
存储库
页面。所以我认为将这个大查询拆分为小查询更好

以下是一些小问题:

关注者查询:

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
    }
  }

我说得对吗?有必要这样做吗?在这种情况下,最好的做法是什么?有没有任何文档可以教人们如何处理这个问题,或者告诉人们最佳实践?

我找到了阿波罗关于查询拆分的文档:

您可以将查询吐入其中,这样您仍然只会触发一个请求,并且有更小的查询。大概是这样的:

追随者片段:

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
  }
}

“大”查询有什么问题(实际上我认为它很小)?这就是GraphQL最初被发明的原因。Github也会很高兴,您可以在一次查询中获得所需的数据,并且只获得所需的数据。如Apollo文档中所述,拆分查询有一些原因(例如,为了加速UI),但特别是在服务器到服务器的通信中,这种情况非常罕见。首先,请重新考虑将它们分开。你有没有找到合适的解决方案?如果没有相关的较小查询来重新提取较大查询中的片段部分,我看不出片段有什么帮助。