Facebook:如何在Golang中搭建GraphQL?

本文介绍了GraphQL作为Facebook创建的查询语言,用于更高效的数据通信。它允许精确查询,减少了不必要的API调用。文中详细讲解了GraphQL的查询、模式、分解器、突变和订阅等操作,并对比了其与REST API的优缺点。最后,文章通过Golang演示了如何搭建GraphQL服务器,包括项目架构和关键文件的实现。
摘要由CSDN通过智能技术生成

全文共9939字,预计学习时长25分钟

 

Facebook:如何在Golang中搭建GraphQL?

 

多年来,人们一直在使用REST API来满足开发需求,但得完成大量不必要的调用后,开发者才能灵活使用。例如,如果Web和移动设备所需的数据不同,我们还须针对Web和移动设备创建两个不同的端点。

 

因此,Facebook创建了一种查询语言——GraphQL,该语言可以准确地给出开发者查询的内容,干净利落,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

 

本文将重点介绍GraphQL的主要功能,以及就API而言它存在的优缺点。文末将展示一个使用Golang的简单程序(已搭建GraphQL)。

 

Facebook:如何在Golang中搭建GraphQL?

 

什么是GraphQL?

 

GraphQL是用于API的查询语言,它是服务器端运行时,通过为数据定义的类型系统执行查询。

 

GraphQL是一种查询语言,适用许多领域,但通常用来在客户端和服务器应用程序之间搭桥。无所谓使用的是哪个网络层,所以可以在客户端和服务器应用程序之间读取和写入数据。(RobinWieruch《GraphQL指南》)

 

虽然GraphQL是查询语言,但它与数据库没有直接关系,也就是GraphQL不限于任意SQL或是NoSQL的数据库。GraphQL位于客户端和服务器端,通过API连接/访问。开发这种查询语言的目的之一是通过提供所需的数据来促进后端、前端或移动应用程序之间的数据通信。

 

Facebook:如何在Golang中搭建GraphQL?

 

 

Facebook:如何在Golang中搭建GraphQL?

 

GraphQL的操作

 

查询(Query)

 

查询用于读取或获取值。无论哪种情况,操作都是一个简单的字符串,GraphQL服务器可以解析该字符串并以特定格式的数据进行响应。

 

你可以使用查询操作从API请求数据。查询描述需要从GraphQL服务器获取的数据,发送查询其实是按字段要求提取数据。(Eve Porcello、Alex Banks著《学习GraphQL》)

 

Facebook:如何在Golang中搭建GraphQL?

 

模式(Schema)

 

GraphQL使用Schema描述数据图的形状。这样的Schema定义类型的层次结构,依托的是从后端数据存储区填充的字段,也准确表示客户端可以对数据图执行哪些查询和突变。

 

分解器(Resolver)

 

分解器是负责为Schema单一字段填充数据的功能。它可以用你定义的任何方式填充该数据,例如从后端数据库或第三方API提取数据。

 

突变(Mutation)

 

修改数据存储中的数据并返回一个值,它可用于插入、更新或删除数据。

 

突变与查询原理相同:它具有字段和对象、参数和变量、片段和操作名称,以及返回结果的指令和嵌套对象。(Robin Wieruch著《GraphQL之路》)

 

Facebook:如何在Golang中搭建GraphQL?

 

订阅(Subscription)

 

将数据从服务器推送到客户端的方法是选择侦听来自服务器的实时消息。

 

GraphQL的订阅来自Facebook的真实用例。开发团队希望找到一种方法,不刷新页面就能实时显示发文获得的有效点赞(Live Likes)。(Eve Porcello、Alex Banks著《学习GraphQL》)

 

Facebook:如何在Golang中搭建GraphQL?

 

 

Facebook:如何在Golang中搭建GraphQL?

 

GraphQL的优势与劣势

 

Facebook:如何在Golang中搭建GraphQL?

 

 

优势

 

开发迅速

 

来看一个案例:如何得到图书借阅者的数据。在视图中,首先我要显示书籍列表,书籍列表菜单显示中出现一个借阅者的列表。在REST API中,需要创建新的端点以返回图书清单,再创建一个新的端点以返回每本书的借阅人。<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值