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。

讨论时间🤔

Made with Slides.com