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

sli*_*wp2 3 graphql graphql-js github-graphql

我正在使用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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

这是小查询:

关注者查询:

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

存储库查询:

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

用户查询:

query($login: String!, $first: Int) {
    user(login: $login) {
      avatarUrl
      login
      name
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*iel 5

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

关注者片段:

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

存储库片段:

fragment repositories on User {
  repositories(first: $first) {
      edges{
        cursor
        node{
          id
          name
        }
      }
      totalCount
    }
}
Run Code Online (Sandbox Code Playgroud)

将它们全部放在查询中:

query ($login: String!, $first: Int, $after: String) {
  user (login: $login){
    avatarUrl
    login
    name
    ...followers
    ...repositories
  }
}
Run Code Online (Sandbox Code Playgroud)