GraphQL 中的代码生成与类型检查

阅读时长 8 分钟读完

GraphQL 是一种面向 API 的查询语言,它提供了强类型、可预测、客户端驱动的数据查询方式。在前端开发中,使用 GraphQL 可以解决很多与后端数据交互相关的繁琐问题,例如数据规范化、查询复杂度控制等。然而,手写 GraphQL 查询和响应类型定义工作量较大,难以维护和修改。因此,本文将介绍如何使用自动生成工具生成 GraphQL 代码,并实现类型检查。

代码生成工具的选择

代码生成工具可以根据 GraphQL 的 schema 自动生成查询类型、响应类型、查询函数等代码。在市面上存在许多代码生成工具,其中比较常用的有:

  • Apollo GraphQL Codegen: Apollo 官方出品的代码生成器,支持多种语言、多种生成方式,且支持通过插件扩展功能。
  • GraphQL Code Generator: 支持 16 种语言,集成了多种插件,例如自动生成 TypeScript 类型、自动生成 React Hooks 等。

除了以上两种,还有其他一些工具,例如 graphql-schema-typescript、gql-codegen等,这里不再一一介绍。根据实际情况选择适合自己的工具即可。

Apollo Codegen 的使用

1. 安装

需要先安装 apollo 工具链:

然后在项目中安装必要的依赖:

2. 配置

在项目根目录下创建 codegen.yml 文件,填写如下配置:

其中,schema 属性填写后端 GraphQL 服务的 url,documents 属性填写包含 GraphQL 查询和变量定义的 .graphql 文件路径。generates 属性则是生成代码的配置项,配置文件名和生成插件可自行调整。

生成的 types.ts 文件会包含后端服务的类型定义和自动生成的查询函数,例如:

-- -------------------- ---- -------
------ ---- ------------- - -
  ------------ --------
  ------- ------
    ------------- ------------ ------- --- ------- ------- -------------- ------ ------------- ---
  --
--

------ ---- ---------------------- - ------- ----- -------- ----- ---

------ ---- ------------- - -
  ------------ --------
  ------- ------
    ------
      ------- ------------ ------- --- ------- ------ -------------- ------- ------------- --
    -
  --
--

------ ----- ---------------- - ----
  ----- -------- -
    ----- -
      --
      -----
      ----
    -
  -
--

------ -------- -----------------
  ------------- -------------------------------------- -----------------------
- -
  ------ ------------------------------ ----------------------------------------- -------------
-

3. 使用

在页面中使用自动生成的查询函数:

-- -------------------- ---- -------
------ - ----------------- ------------- - ---- ------------------

-------- ---------- -
  ----- - -------- ------ ---- - - -------------------

  -- --------- ------ ------------------
  -- ------- ------ -------- -------

  ------ ------------------ --- ------ ---- -- -- -
    ---- ---------
      ----------------
      -------------
    ------
  ---
-

由于自动生成的 queries 是根据 schema 自动生成,并且使用 TypeScript 静态类型语言,因此调用时会实现类型检查。若请求的数据与后端返回的数据类型不匹配,开发工具会在编译时提示错误。

GraphQL Code Generator 的使用

1. 安装

首先,需要安装代码生成器本身:

然后,需要根据实际情况选择需要使用的插件。以 TypeScript 为例,需要安装以下插件:

2. 配置

在项目中创建 codegen.yml 文件,填写下面的内容:

-- -------------------- ---- -------
------- -----------------------------
---------- ------------------
----------
  -------------------------
    --------
      - ------------
      - -----------------------
      - -------------------------
    -------
      ---------- ----
      -------------- -----
      -------- -----

其中,schema 属性填写后端 GraphQL 服务的 url,documents 属性填写包含 GraphQL 查询和变量定义的 .graphql 文件路径。generated 属性则是生成代码的配置项,配置文件名和插件可自行调整。如果使用了 .graphql 文件则需增加对应的插件,并以 .graphql 作为文件名后缀。

类型定义和查询函数会被生成到 src/generated/graphql.ts 文件,包括以下内容:

-- -------------------- ---- -------
------ ---- ---------------------- - ------------- ----- -------- ----- ---

------ ---- ------------- - - ------------ ------- - - -
  ------- ------------
    ------------------- ------------ ------ - - ---------------- ---- - ------- - ---------
  --
--

------ ----- ---------------- - ----
  ----- -------- -
    ----- -
      --
      -----
      ----
    -
  -
--

------ -------- -----------------
  ------------- -------------------------------------- -----------------------
- -
  ------ ------------------------------ ----------------------------------------- -------------
-

3. 使用

-- -------------------- ---- -------
------ - ----------------- ------------- - ---- --------------------

-------- ---------- -
  ----- - -------- ------ ---- - - -------------------

  -- --------- ------ ------------------
  -- ------- ------ -------- -------

  ------ ------------------- --- ------ ---- -- -- -
    ---- ---------
      ----------------
      -------------
    ------
  ---
-

generated/graphql 文件包含了自动生成的 types 和 queries/mutations。与 Apollo Codegen 类似,GraphQL Code Generator 生成的代码仍然可以实现类型检查。

总结

本文介绍了使用 GraphQL 代码生成工具自动生成代码并实现类型检查的方法。在编写前端代码时,避免了使用魔法字符串操作,使得代码更易维护、更加清晰易懂,并能有效避免人为错误。根据实际情况,选择 Apollo Codegen、GraphQL Codegen 等工具达到代码自动生成的效果。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c26a9b83d39b488166b820

纠错
反馈