Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

前端工程化 GraphQL #54

Open
pfan123 opened this issue Mar 6, 2020 · 0 comments
Open

前端工程化 GraphQL #54

pfan123 opened this issue Mar 6, 2020 · 0 comments

Comments

@pfan123
Copy link
Owner

pfan123 commented Mar 6, 2020

什么是 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 为何没有火起来?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant