graphQL与react都是由Facebook设计,react为构建用户界面提供了一种声明式方案,类似地graphQL为API通信提供声明式方案,对想要的数据的声明式描述。
例如并行发起数据请求时,我们希望能同时获得所需的全部数据,graphQL可以去帮我们处理多个数据请求,我们只需要关心我们想要的数据。
此外graphQL也衍生扩展了很多功能,我们常说的分层网络协议,web开发中我们面对的是应用层即浏览器,考虑到应用场景的常见数据获取需求,graphQL封装了一系列的方法解决了许多开发需求。所以我们值得去了解学习以及运用graphQL。这其实是技术发展的趋势,代码功能更加细分,更加精准。
前端开发中数据获取时,通常需要思考的问题如下,graphQL都给了我们方案
http协议:
graphQL是在请求主体中包含查询的http请求,所以前端可以利用fetch API发起与后端协商好的graphQL请求,也可以直接使用封装好的模块库 e.g: graphql-request
后端需要一个使用graphQL的服务器,每一种流行语言都有graphQL服务器端库,例如Ruby、python、scala。graphQL服务器可以基于任何数据源之上,无论是SQL、MongoDB、Redis,还是第三方API。这也衍生出另一个有点,graphQL服务器可以同时作为多个数据源存储的抽象
apollo graphQL提供了一套完整的实现支持
https://www.apollographql.com/
github也开放了自己的 graphQL API https://docs.github.com/en/graphql/overview/explorer