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

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


猜你喜欢

  • 使用 Koa 框架进行 SEO 优化

    SEO(Search Engine Optimization,搜索引擎优化)是指优化网站内容和结构,以吸引更多的搜索引擎流量和提高排名。在现代互联网时代,SEO 对于每一个网站来说都非常重要。

    1 年前
  • Jest 常见问题解决方案

    前言 Jest 是 Facebook 推出的一款 JavaScript 测试框架,它提供了很多功能和工具,能够帮助开发者在前端项目中进行单位测试、集成测试等多种测试,保证项目的可靠性和稳定性。

    1 年前
  • GraphQL 的架构设计与实现(上)

    GraphQL 是一种新型的 API 查询语言,其强大的架构设计和简洁的语法使其成为了前端领域最热门的技术之一。本文主要讨论 GraphQL 的架构设计和实现,帮助读者深入了解 GraphQL 技术的...

    1 年前
  • # 如何使用 ES6 优化 JavaScript 循环

    如何使用 ES6 优化 JavaScript 循环 JavaScript 中循环操作的性能一直是一个重要的话题。一些经典的优化策略如避免频繁的 DOM 操作,尽量缩短执行时间等都已经被广泛应用。

    1 年前
  • Socket.io 与 WebSocket 的区别及使用场景

    随着 Web 应用程序的不断发展,Web 技术的实时性也越来越重要。WebSocket 和 Socket.io 是两个用于实现 Web 实时通信的流行技术,本文将重点介绍它们的区别及使用场景。

    1 年前
  • ES9 中新增的 Object.values() 方法在实际开发中的使用

    随着 JavaScript 的不断发展和普及,越来越多的新特性被加入到了这门语言中。ES9 中新增了 Object.values() 方法,用于获取一个对象中所有属性的值。

    1 年前
  • SSE 与 Nginx 的结合使用方式介绍

    前言 SSE(Server-Sent Events)是 HTML5 中的一个新特性,提供了一种从服务器向客户端推送事件的 HTTP 通讯方式。相对于传统的轮询和长轮询方式,SSE 建立在单个 HTTP...

    1 年前
  • 在 Vue.js 中使用 Promise 封装异步请求

    在 Vue.js 中使用 Promise 封装异步请求 在我们日常的开发中,异步请求是一个非常重要的部分。对于前端开发者来说,处理异步请求的代码通常是非常复杂的。而 Promise 技术则为我们提供了...

    1 年前
  • ES7 的新特性:Array.prototype.values() 方法

    ES7 的新特性:Array.prototype.values() 方法 在 JavaScript 中,数组是一种非常有用的数据结构。 ES7 为数组添加了一个新的方法,即 Array.prototy...

    1 年前
  • Vue SPA 项目打包遇到的 BUG 解决方法

    在进行 Vue 单页面应用(SPA)开发时,我们经常需要将其打包发布上线。然而在打包的过程中,可能会遇到各种奇怪的 BUG,本文将详细介绍一些常见的打包问题及其解决方法。

    1 年前
  • ECMAScript 2017 中的尾调用优化:一个例子

    ECMAScript 2017 中的尾调用优化:一个例子 一、引言 在 JavaScript 中,函数调用是一项很常见的操作。如果在函数中调用另一个函数,就会形成调用栈。

    1 年前
  • 使用 Babel 快速升级 React 项目中的老版本语法

    如果你是一名前端开发人员,那么你肯定知道 React 是一个非常流行的 JavaScript 框架,它让开发人员可以轻松地构建复杂的交互界面。然而,由于 React 不断发展,它的语法也在不断地变化。

    1 年前
  • 如何解决无障碍设备在使用过程中的卡顿现象

    在如今数字化的时代,越来越多的人通过无障碍设备来获取信息、交互和娱乐。然而,这些设备在使用过程中会出现卡顿现象,严重地影响用户体验。本文将探讨无障碍设备卡顿的原因,并提供解决方案,以确保无障碍设备的流...

    1 年前
  • Vue.js 中 Webpack 部分详解

    Vue.js 是一个流行的 JavaScript 前端框架,使用 webpack 作为打包工具成为了当下 Web 前端开发的主流方式。在本文中,我们将深入探讨 Vue.js 中 webpack 的部分...

    1 年前
  • Express.js 中如何使用中间件处理 cookie 和 session

    简介 在使用 Express.js 构建 Web 应用时,处理 cookie 和 session 是非常常见的需求。本文将介绍如何使用中间件来处理 cookie 和 session,并提供示例代码和详...

    1 年前
  • Next.js vs React:使用场景的解析和比较

    作为前端开发者,我们常常会听到 Next.js 和 React 的名字,这两个技术栈在前端开发中占据了重要的地位。虽然 Next.js 是建立在 React 框架之上的,但是这两个技术栈还是有许多不同...

    1 年前
  • PM2 启动多个进程时如何设置进程名?

    前言 在 Node.js 应用的部署和管理方面,PM2 是一个非常强大的工具。它可以帮助我们管理进程、监控应用、运行脚本等。这篇文章将介绍如何在启动多个进程时设置进程名,方便日后的管理和监控。

    1 年前
  • Polymer VS Web Components:何去何从?

    在前端开发领域,Web Components 是一种非常强大的特性,可以将其用来创建可重用的自定义元素和组件,这大大简化了开发工作。然而,要使用 Web Components,就需要一些复杂的技术,而...

    1 年前
  • 如何使用 Enzyme 测试 React 组件的性能

    1. 什么是 Enzyme Enzyme 是一款 React 组件测试工具,由 Airbnb 开源。它提供了更直观、易于编写和阅读的测试用例编写方式,同时还扩展了 ReactTestUtils 库的功...

    1 年前
  • 使用 Mongoose 时如何更新嵌套对象

    引言 当使用 Mongoose ORM 来操作 MongoDB 时,可能会遇到需要更新嵌套对象的情况。本文将介绍如何在 MongoDB 中使用 Mongoose ORM 来更新嵌套对象。

    1 年前

相关推荐

    暂无文章