GraphQL
引用资料:
- https://zhuanlan.zhihu.com/p/39293150
- https://blog.apollographql.com/optimizing-your-graphql-request-waterfalls-7c3f3360b051
- https://blog.apollographql.com/the-concepts-of-graphql-bc68bd819be3
是什么?
为什么?
概念
- 基于类型系统的API查询语言。
- 服务端运行时系统设计模式。
特点
- 按需请求,字段级别粒度。
- 存储无关,协议无关。
- 一套描述,多端复用。

Graph(业务建模为图)

QL(查询语言)
好处
- 二维结构,能更好的描述业务,依赖关系。
- 降低沟通成本:
- 一旦实现正确,增减字段无需沟通,无需改代码。
- 服务端修改增减结构更方便,只是resolver顺序改变,天然的离散数据聚合。
- 按需请求,省流量。
- SDL本身就是文档,解决rest文档各式各样参差不齐的问题,避免以及后期繁琐的维护同步文档工作。
- ....
// GraphQL 查询
author(id: "7") {
id
name
avatarUrl
articles(limit: 2) {
name
urlSlug
}
}
// GraphQL 查询结果
{
"data": {
"author": {
"id": "7",
"name": "Robin Wieruch",
"avatarUrl": "https://domain.com/authors/7",
"articles": [
{
"name": "The Road to learn React",
"urlSlug": "the-road-to-learn-react"
},
{
"name": "React Testing Tutorial",
"urlSlug": "react-testing-tutorial"
}
]
}
}
}怎么弄?
http://graphql.cn/
https://www.apollographql.com/
....
茴香豆的一百种写法🤔
创建一个服务器



在客户端调用Query

挂载到url端点
有什么问题?
a)逐层resolve带来的N+1问题。
b)API层拆分难,业务耦合重。
c)重构难,与基于path定义的router相关的所有东西都得改。编码方式颠覆。
d)单url端点的http相关问题。如客户端缓存。
e)收敛权限。
理想姿势?


b)考虑规模,是否需要动用graph。
讨论时间🤔
GraphQL
By shaomingquan
GraphQL
- 541