pfan123/Articles

前端工程化 GraphQL

pfan123 opened this issue · 0 comments

什么是 GraphQL?

GraphQL 是 Fackbook 的一个开源项目,它是一种 API 查询语言,它其实是一种语言的规范,跟具体的实现是没有关系的。而且它是一层非常薄的数据抽象层,它既不会负责存储数据,也不会负责渲染数据;简单说就是一层 Proxy(代理),它把后端的数据做一些聚合、校验、判断,再返回给前端。对于前端来说,它是一种结构化的查询语言,类似于 JSON。相比 RESTful API 主要有以下特点:

  • 根据需要返回数据
  • 一个请求获取多个资源
  • 提供内省系统

GraphQL 与 RESTful 有什么区别?

REST 与 GraphQL 都是服务端所承载的系统对外的服务接口,因此两者肯定是可以共存的,甚至可以共用一套 Authorization 等业务逻辑。

  • 入口 (entry point)

RESTful 的核心理念在于资源 (resource),且讲究一个 RESTful 接口仅操作单一资源;因此在你使用 RESTful 时,会设计出大量的接口。GraphQL 是单一入口,一般配置在 [host]/graphql/,所有的资源都从该入口通过 graphql 的语句获取或修改(当然 GraphQL 亦支持多入口,但显然多入口的数量也远小于 RESTful)。

  • 数据的关联性

RESTful 所操作的资源相对是离散的;而 GraphQL 的数据更有整体性。

GraphQL 与 RESTful 相比有什么优点?

1. 数据的关联性和结构化更好

2. 更易于前端缓存数据

这个一般像 Relay 和 apollo-client 都替你做好了,如果你想了解它的缓存原理,请移步 GraphQL Caching

3. Versionless API

相比于 RESTful 为了兼容新老客户端所添加的版本号,在 GraphQL 中,如果你需要服务端提供与以前不一样的行为,只需要修改 root Query 的定义,在上面额外添加你想要的 Node 即可。

4. 更健壮的接口

不用再因为在缺乏沟通的情况下修改接口,而为系统埋下不稳定的定时炸弹。一切面向前端的接口都有强类型的 Schema 做保证,且完整类型定义因 introspection 完全对前端可见,一旦前端发送的 query 与 Schema 不符,能快速感知到产生了错误。

5. 令人期待的 subscription

Apollo VS Relay

Relay - Facebook 基于 React 的定制化的GraphQL客户端。

Apollo - Apollo是行业标准的GraphQL实现,提供了将现代应用程序连接到云的数据图层。

apollo

Graphql-docs

2fd/graphdoc
graphql-docs
graphql-markdown

Other Resource

GraphQL Schema 设计实践

5个用/不用GraphQL的理由

apollographql

GraphQL 为何没有火起来?