2

我正在尝试构建一个GraphQL endpointsin golang.

我一直在关注这些博客Learn Golang + GraphQL + Relay #1以实现graphQlingolang并且我已经成功构建了GraphQL.

有几个概念对我来说仍然不清楚,因为我如何pagination使用 构建端点graphQl,还有类似的方法

//How to build endpoints for fetching data from this query
friends.first(1){
   cursor,
   node {
      name
   }
}

//or this query
friends.last(1){
   cursor,
   node {
      name
   }
}

介绍 Relay 和 GraphQL

因为,我来自Angular背景,这个Relay概念对我来说仍然很困惑。中继如何促进客户端和服务器之间的通信。

请提供一些使用 Node 或任何使这些概念更清晰的示例

4

1 回答 1

5

分页从来都不是一个简单的问题,也不是 GraphQL 明确解决的问题。GraphQL 提供了一个数据获取框架,该框架如何用于做事(如分页)取决于开发人员。

Relay团队尝试使用 GraphQL 的游标连接规范来标准化分页游标连接规范不是 Relay 独有的,可以与 Angular 一起使用,该规范的主要目标是提供一种标准化的方式来处理来自 GraphQL 服务器的大型集合。关于本规范需要注意的主要一点是,每个对象都有一个关联的光标。此关联游标允许客户端从集合中的任何点恢复分页。

如果您对实现 Relay 规范感兴趣,我鼓励您阅读 Sashko Stubailo 的理解分页:REST、GraphQL 和 Relay,其中他解释了 Relay 连接规范背后的动机并解释了如何实现它。

要查看实际的连接规范,请查看示例SWAPI GraphQL API,它在 GraphQL 中实现了中继规范。我鼓励您打开文档窗口并浏览PeopleConnection. 请注意它们是如何实现edgespeople字段的。

如果游标分页对您来说太复杂而无法使用/实现,您始终可以为您的 GraphQL API 公开传统的限制/偏移分页。界面可能看起来像这样:

{
  friends(limit: 5, offset: 20) {
    name
  }
}

最后,您提供的查询来自 GraphQL 的早期技术预览,实际上并不符合规范(来源)。更合适的查询(如 Hafiz 所述)是:

{
  friends(first: 1) {
    cursor
    node {
      name
    }
  }
}

React Europe 2015 有两个很棒的演讲,我还建议您观看更多关于没有 Relay 的 GraphQL 的演讲。

于 2016-04-05T13:27:13.513 回答