前端工程化 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实现,提供了将现代应用程序连接到云的数据图层。
Graphql-docs
2fd/graphdoc
graphql-docs
graphql-markdown