[英]Concepts of GraphQL and Relay
我正在尝试在golang
建立GraphQL endpoints
。
我一直在关注这些博客了解Golang + GraphQL +接力#1实施的graphQl
在golang
,我已经成功地构建简单的端点GraphQL
。
我仍然不清楚一些概念,因为我该如何使用graphQl
构建pagination
端点,还有诸如
//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
}
}
因为我来自Angular
Background,所以Relay
概念仍然让我感到困惑。 中继如何促进客户端与服务器之间的通信。
请提供一些使用Node或其他使这些概念更清晰的示例
分页从来都不是一个简单的问题,也不是GraphQL明确解决的一个问题。 GraphQL提供了一个数据获取框架,该框架如何用于做事(例如分页)取决于开发人员。
中继团队已尝试使用GraphQL的光标连接规范来标准化分页。 游标连接规范不是Relay独有的,可以与Angular一起使用,该规范的主要目标是提供一种使用GraphQL服务器处理大型集合的标准化方法。 有关此规范的主要注意事项是,每个对象都有一个关联的游标。 此关联的游标允许客户端从集合中的任何点恢复分页。
如果您对实现中继规范感兴趣,我鼓励您阅读Sashko Stubailo的《 理解分页:REST,GraphQL和Relay》 ,其中他解释了中继连接规范背后的动机并解释了如何实现它。
要查看实际的连接规范,请查看示例SWAPI GraphQL API ,该示例在GraphQL中实现了中继规范。 我鼓励您打开文档窗口并浏览PeopleConnection
。 注意它们如何同时实现edges
和people
字段。
如果游标分页太复杂而无法使用/实现,则可以始终为GraphQL API公开传统的限制/偏移分页。 该接口可能看起来像这样:
{
friends(limit: 5, offset: 20) {
name
}
}
最后,您提供的查询来自GraphQL的早期技术预览,并且实际上不符合规范( 源 )。 更合适的查询(如哈菲兹提到的)将是:
{
friends(first: 1) {
cursor
node {
name
}
}
}
React Europe 2015有两个很棒的演讲,我也建议您观看其中更多有关不带中继的GraphQL的演讲。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.