GraphQL 本身是一个标准,也就是说只是描述 GraphQL 服务器应该具备的能力,要使用的话,你可以选择任意的变成语言来实现(参考实现),或者使用开箱即用的 Graphcool 服务

应用场景

  • 1、单数据库带 GraphQL 服务器
  • 2、多个遗留系统或者第三方系统通过 GraphQL 服务器提供的 GraphQL API 实现集成
  • 3、同一个 GraphQL API ,数据库和第三方应用系统都可以访问

1、单数据库带 GraphQL 服务器

假设你是一个从0开始开发的项目。当query到了 GraphQL 服务器,服务器读取了 query 的payload,然后从数据库中获取需要的信息。这个过程称之为resolving the query。然后按照 GraphQL 标准规范的要求构建响应对象并返回给客户端。

需要注意的是 GraphQL 与传输层是中立的,意味着可以使用任意可用的网络协议,譬如TCP WebSocket等。

GraphQL 并不关系数据库或者数据存储的格式。可以使用关系型也可以使用NoSQL

2、使用 GraphQL 来集成已有的系统

对于存在遗留系统的公司,诸多API随着时间维护起来很麻烦,如果想要在多个已有系统的基础上再构建一些创新性的产品,基本上不现实。

这种情况下 GraphQL 可以统一现有的所有系统,将其复杂度隐藏在 GraphQL API 之下。新的客户端程序只需要与 GraphQL 服务器交互来获取所需数据即可。GraphQL 服务器负责从现有的系统中获取数据并打包成要求的格式

3、混合式

GraphQL 服务器自带一个数据库,并且能够与遗留系统交互。

当 GraphQL 服务器收到 query请求后,它会进行解析,然后再来决定是从数据库中获取数据还是从其他遗留系统中获取数据

Resolver Functions

每个 GraphQL query/mutation 的 payload 都会包含一些字段。在GraphQL 服务器的实现中,这些字段中的每一个实际上都会对应到一个叫resolver的函数。这个函数的作用就是获取这个字段的数据。

当GraphQL 服务器收到 query以后,会调用query payload 中所指定的所有字段对应的resolver函数。resolve 了query以后就可以获取每个字段的对应数据。一旦所有 resolver都返回了数据,GraphQL 服务器就会把数据打包成 query中要求的格式并返回给客户端

GraphQL Client Libraries

使用REST API (imperative data fetching approach)来获取数据,流程如下:

  1. 构建并发送 HTTP 请求
  2. 接收并解析服务器响应数据
  3. 本地存储数据 可以存在内存中 也可以持久化
  4. 在 UI 中展示数据

而declarative data fetching approach 只需2步:

  1. 描述数据需求
  2. 在 UI 中展示数据

results matching ""

    No results matching ""