GraphQL 和 Relay 的概念

Rob*_*pta 2 go relay node.js reactjs graphql

我正在尝试构建一个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
   }
}
Run Code Online (Sandbox Code Playgroud)

介绍 Relay 和 GraphQL

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

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

Cal*_*mer 5

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

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

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

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

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

{
  friends(limit: 5, offset: 20) {
    name
  }
}
Run Code Online (Sandbox Code Playgroud)

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

{
  friends(first: 1) {
    cursor
    node {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

React Europe 2015 上有两个很棒的演讲,我也建议您观看,其中更多地讨论了没有 Relay 的 GraphQL。