Skip to content

Commit 9bb37c3

Browse files
committed
fix typo.
1 parent e7f3b01 commit 9bb37c3

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

readme-cn.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
在构建 API 时, 数据的拼接和调整一直是比较头疼的问题.
44

5-
过程式的数据处理对调整不友好, 循环和拼接容易产生不易维护的代码. GraphQL 带来的, 通过声明描述数据结构是一个好的方向.
5+
过程式的数据处理对调整不友好, 循环和拼接容易产生不易维护的代码. GraphQL 带来的通过声明描述数据结构是一个好的方向.
66

77
GraphQL 的亮点是通过 Query 确定查询结构, 一层层驱动后端的 resolver 来构造数据.
88

@@ -13,12 +13,14 @@ GraphQL 的亮点是通过 Query 确定查询结构, 一层层驱动后端的 re
1313
- Query 语句在Schema 变化后有维护成本
1414
- 权限控制, 速率控制等问题, Schema 可能暴露过多信息.
1515
- Query 比较复杂的话, 性能问题不容易优化.
16-
- 无法对查询到达数据做比较精细的后期处理 (middleware 的入口是query 的顶层)
16+
- 无法对查询到的数据做比较精细的后期处理 (middleware 的入口是query 的顶层)
1717
- Schema 复杂之后, 容易出现复用代码的管理困难.
1818

19-
对于一个有历史抱负的项目, 引入GraphQL 对前后端的改动成本也很客观.
19+
对于一个有历史包袱的项目, 引入GraphQL 对前后端的改动成本也很可观.
2020

21-
另外, 从架构分层的角度来看, 引入 GraphQL 的代表着后端和前端的关系, 从以往多个确定的接口, 变成了不可预测使用场景的单一接口. 这就导致前端对后端之间的依赖关系变得不清晰了(失去了感知), 后端只能以面向一组"可能的查询组合" 为目标来做开发. 在这种对前端使用方式失去感知的情况下, 接口调整的成本会显著上升. 重构能力也就下降了.
21+
另外, 从架构分层的角度看, 引入 GraphQL 代表着前后端的关系, 从以往确定的多个接口, 变成了不可预测使用场景的单个接口.
22+
23+
这导致前端对后端之间的依赖关系变得不清晰了(失去了清晰感知), 后端只能以面向一组"可能的查询组合" 为目标来提供功能. 在这种失去细节感知的情况下, 接口调整的成本会显著上升. 重构能力也会下降.
2224

2325
> 因此会看到有些GraphQL设计得就像一个个独立的API一样, 就是为了将各个接口之间区分开, 并且减少之间的深层schema 耦合.
2426
>

resolve-vs-graphql-cn.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ graphql 优点
1111

1212
graphql 缺点
1313

14-
- 缺少层级之间进行数据聚合的能力
14+
- 缺少层级之间进行数据二次处理的能力. 比如上层无法在下层数据获取后进行额外操作.
1515
- 如果是全栈开发,后端和写 query 有重复劳动
16-
- 后端需要引入 graphql 相关框架
16+
- 前后端需要引入 graphql 相关框架
1717
- cache, authority, rate limit 控制起来不容易
1818
- 对后端不太友好
1919

@@ -35,3 +35,19 @@ pydantic-resolve 缺点:
3535
- 查看组合类型需要通过 OpenAPI 查看 response 信息
3636
- 前后端分离的情况,没有后端一个万能接口来得方便
3737
- Friend -> Friend 的 graph 描述不方便
38+
39+
40+
### 使用 GraphQL 正确的姿势
41+
42+
graphql 的使用思路有两种
43+
44+
一种是根据数据的ER,构建关系型查询
45+
典型的比如github,jira 提供的graphql接口
46+
47+
用户熟悉这种固定的ER,查询到规范的数据之后自己再做二次加工。换言之你哪怕有定制化的需求,也只能自己想办法处理,不可能向他们提出这种要求。
48+
49+
另一种是面向业务,构建的是业务层的查询接口
50+
这种场景并不适合graphql,他对查询的数据定制化要求高,意味着通过通用接口拿到的数据往往需要根据业务做再加工,而且也会和后端商量,定制一些面向专用页面的graphql 接口。这也会慢慢变成常态,因为很多数据并不适合暴露到前端做二次处理。
51+
对于一整套业务,graphql 这样一个灵活的中间层反而对业务的整体清晰度造成了影响。
52+
53+
结论就是,graphql 适合稳定的,轻业务概念的数据的组合查询。而不适合面向具体业务,高度定制化的场景。

0 commit comments

Comments
 (0)