GraphQL Github API格式

GraphQL Github API格式,graphql,github-api,apollo,Graphql,Github Api,Apollo,我想知道如何处理以下问题。我使用GraphQL通过以下查询查询v4 Github API: { viewer { repositories(first: 30) { edges { node { name } } } } } 这给了我一个这样的回答: { "data": { "viewer": { "repositories": {

我想知道如何处理以下问题。我使用GraphQL通过以下查询查询v4 Github API:

{
  viewer {
    repositories(first: 30) {
      edges {
        node {
          name
        }
      }
    }
  }
}
这给了我一个这样的回答:

{
    "data": {
        "viewer": {
            "repositories": {
                "edges": [
                    {
                        "node": {
                            "name": "test-repo"
                        }
                    },
                    {
                        "node": {
                            "name": "another-repo"
                        }
                    }
                ]
            }
        }
    }
}
我对GraphQL非常陌生,我知道在我的查询中我需要提供边和节点,但我更希望以这种方式得到回复,因为我不想知道前端中的“边”和“节点”:

{
    "data": {
        "viewer": {
            "repositories": [
                    {
                        "name": "test-repo"
                    },
                    {
                        "name": "another-repo"
                    }
                ]
            }
        }
    }
}
我猜这种响应对于GraphQL来说是正常的,但是为了在我的前端更容易使用,一直重写为响应是相当麻烦的。是否有某种方法可以发出“边”和“节点”并获得我想要的格式,或者这完全取决于我来处理


我看过一些像这样的库,但我不知道这是否适合处理这样的事情。希望对GraphQL稍有经验的人能告诉我更多信息。

有时候,服务提供两个端点:中继端点(带边和节点)和简单端点

看起来GitHub只有一个中继端点。在这种情况下,您唯一能做的就是在前端手动格式化响应

实际上,需要这样复杂的响应结构,因为我们经常需要进行分页。请看一个例子:

{
    getArticle(id: "some-id") {
        id
        userId
        user {
            id
            name
        }
        tags(first: 10, after: "opaqueCursor") {
            edges {
                node {
                    id
                    name
                    itemsCount
                }
            }
            pageInfo {
                hasNextPage
                hasPreviousPage
                endCursor
                startCursor
            }
        }
    }
}
pageInfo
边缘位于同一级别


因此,如果以后需要进行分页,最好保持响应格式不变。

有时,服务提供两个端点:中继端点(带边缘和节点)和简单端点

看起来GitHub只有一个中继端点。在这种情况下,您唯一能做的就是在前端手动格式化响应

实际上,需要这样复杂的响应结构,因为我们经常需要进行分页。请看一个例子:

{
    getArticle(id: "some-id") {
        id
        userId
        user {
            id
            name
        }
        tags(first: 10, after: "opaqueCursor") {
            edges {
                node {
                    id
                    name
                    itemsCount
                }
            }
            pageInfo {
                hasNextPage
                hasPreviousPage
                endCursor
                startCursor
            }
        }
    }
}
pageInfo
边缘位于同一级别


因此,如果以后需要进行分页,最好保持响应格式不变。

如果知道没有搜索这些关系,可以删除
查询。通过检查
pageInfo
hasNextPage
并使用
endCursor
作为
after
查询参数,基于光标的分页将起作用:

 viewer {
      repositories(first: 30,after:"<CURSOR_STRING>") {
        totalCount
        pageInfo{
          hasNextPage
          endCursor
        }
        nodes{
          name
        }
      }
    }

如果知道没有沿着这些关系进行搜索,则可以删除
查询。通过检查
pageInfo
hasNextPage
并使用
endCursor
作为
after
查询参数,基于光标的分页将起作用:

 viewer {
      repositories(first: 30,after:"<CURSOR_STRING>") {
        totalCount
        pageInfo{
          hasNextPage
          endCursor
        }
        nodes{
          name
        }
      }
    }