上半年公司分享会,选了个GraphQL的主题,只是做了个简单的分享,东拼拼西凑凑,算是完成了吧
一 GraphQL是什么?
一种用于 API 的查询语言
GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。
一种用于API的查询语言,听着像是sql语言一样定义了数据的增删改查操作。一套易于理解的完整描述其实就是后面提到的schema,后面的功能都是以这个作为了基础。
特地准备了个简单的例子,通过applo的例子代码搞的,我们下面的例子代码都是以这个场景设计的,比较简单没时间完善
二 API数据的描述 -- Schema 模式(在服务器端定义的)
graphql-todolist-demo/server/src/schema.js
下面例子里面的数据描述文件,里面有一些基础类型和自定义对象类型
下面这个是定义增删改(Mutation),查(Query),实时通信(Subscription)
server跑起来会有个playground的页面对接口进行调试,下面是体现下实际接口请求返回的数据:
通过查询我们可以发现,请求的是怎么样的数据结构,返回的就是对应的结构
也可以定义一些变量,这样就可以复用
Subscription,实例在demo里面有,应为ppt是录了个视频,这边就不贴例子了
三 GraphQL的优点
1.强类型 Schema,有了强类型的Schema,一切都变成了可能
2.按需要加载,减少带宽,不必要的数据查询
3.更好的快速开发产品
下面特地举了个接口组装的例子,就是获得了第3方的schema定义,通过nodejs去调用第3放的Graphql的接口,代码更易懂
我们可以看到,一切的基础都是schema文件。规范了服务器端和客户端开发,成为了服务器端和客户端之间的桥梁
四 GraphQL的缺点
1.不可预测的执行,对于同一个操作,由于请求体的结构不一样,对应的接口复杂度是不可预知的。由于灵活性,还有n+1问题,
2.也没办法查询不限深度的数据(树),对于接口权限和接口调用权限的限制都不好处理。