前言
GraphQL 是现代化的 API 查询语言,它提供了一种更高效、更强大的数据传输方式,受到了广泛的欢迎。GraphQL-Typewriter 是一个 npm 包,它使得使用 GraphQL 更加容易和高效。它的主要目的是帮助开发人员快速创建和维护 GraphQL 带有 Typescript 定义的 API。
在本文中,我们将深入探讨如何使用 npm 包 graphql-typewriter 来实现 GraphQL API 的开发。
什么是 GraphQL-Typewriter?
GraphQL-Typewriter 是一个开源的 npm 包,它的主要功能是将基于 TypeScript 的 GraphQL api 定义文档化为可供浏览器和其他 IDE 请求的可传递数据。它还有这几个特点:
- 自动创建 Typewriter 的 API 文档,且生成的文档结构与代码结构绑定;
- 支持缓存;
- 支持加载器;
- 支持自定义插件;
安装
要安装 graphql-typewriter,可以使用 npm 命令:
npm install graphql-typewriter
使用
假设我们已经有一个 GraphQL API,并且我们已经用 TypeScript 编写了 API 的定义和实现,那么如何使用 graphql-typewriter 呢?
步骤一:在配置文件中添加 graphql-typewriter 插件
首先,我们需要在项目中添加一个 typewriter.yaml
配置文件。然后,在该文件中添加 graphql-typewriter 插件:
plugins: - graphql-typewriter
步骤二:生成类型定义文件
接下来,需要运行以下命令来生成类型定义文件:
typewrite
运行此命令后,将会在你的项目中生成两个 .d.ts
文件:graphql-schema.ts
和 graphql-types.generated.ts
。它们将包含用于 TypeScript 的 API 类型定义。
步骤三:导出 GraphQL Schema
在 Express.js 中,可以通过以下方式将 GraphQL schema 导出为 JSON 格式:
-- -------------------- ---- ------- ------ ------- ---- ---------- ------ - ----------- - ---- ------------------ ------ - ----------- - ---- ---------- ------ -- ---- ----- ------ - --------- - ---- --------------------- ----- ------------ - --------------------------------- --------- ----- ------ - -------------------------- ----- ---------- - ------------------ ----- --- - ---------- ------------------- ------------- ------- ----------- -- ----- ------- ---- ---------------- -- -- - ---------------------- -- ---- ------- ---
在以上代码中,我们使用 Node.js 中的 fs 模块将 schema.graphql 文件中的内容读取为字符串,用于构建 buildSchema
实例,然后通过 getSchema
获取 JSON 格式的 schema,并导出。
步骤四:添加 GraphQL API 的定义和实现
最后,我们需要在项目中添加 GraphQL API 的定义和实现。定义文件通常存储在 .graphql
文件中。在定义文件中,我们会定义 Query 和 Mutation 类型以及它们的字段。
-- -------------------- ---- ------- ---- ----- - ----------- ----- ----- - ---- -------- - ----------------- ----------- ----- - ----- --------- - ----- ------- ---- ---- - ---- ---- - --- --- ----- ------- ---- ---- -
在代码实现中,我们需要导入 TypeScript 的接口和需要实现的 resolver 函数,并通过 addResolvers
函数将它们链接起来。
-- -------------------- ---- ------- ------ - ----- ------------- - ---- ---------------------------- ------ - ---- - ---- ---------------- ----- ---------- ------------- - - ------ - -------- ----- --- - -- -- -- - ------ ----- ------------------ -- -- --------- - ----------- ----- --- - ----- -- -- - ----- ------- - ----- ------------------- ------ -------- -- -- -- ------ -------- ------------------ ----- - -------------- - ---------- -
当我们运行服务时,客户端发送的 GraphQL 查询将由 graphql-typewriter 自动生成处理程序函数。这些函数将会负责查询的解析、数据获取等逻辑。
示例代码
以下是一个完整的示例代码:
schema.graphql
-- -------------------- ---- ------- ---- ----- - ----------- ----- ----- - ---- -------- - ----------------- ----------- ----- - ----- --------- - ----- ------- ---- ---- - ---- ---- - --- --- ----- ------- ---- ---- -
index.ts
-- -------------------- ---- ------- ------ ------- ---- ---------- ------ - ----------- - ---- ------------------ ------ - ----------- - ---- ---------- ------ -- ---- ----- ------ - --------- - ---- --------------------- ------ - ------------ - ---- -------------- ----- ------------ - --------------------------------- --------- ----- ------ - -------------------------- ----- ---------- - ------------------ ----- --- - ---------- ------------------------- ------------------- ------------- ------- ----------- --------- ----- ---- ---------------- -- -- - ---------------------- -- ---- ------- ---
resolvers.ts
-- -------------------- ---- ------- ------ - ----- ------------- - ---- ---------------------------- ------ - ---- - ---- ---------------- ----- ---------- ------------- - - ------ - -------- ----- --- - -- -- -- - ------ ----- ------------------ -- -- --------- - ----------- ----- --- - ----- -- -- - ----- ------- - ----- ------------------- ------ -------- -- -- -- ------ -------- ------------------ ----- - -------------- - ---------- -
models/User.ts
-- -------------------- ---- ------- ------ -------- ---- ----------- ------ --------- ------------ ------- ----------------- - ----- ------- ---- ------- - ----- ---------- - --- ----------------- ----- ------- ---- ------- --- ----- ---- - ------------------------------------ ------------ ------ - ---- --
结论
通过使用 graphql-typewriter,我们可以更加轻松地创建和维护 GraphQL API。此工具提供了自动生成文档、支持缓存和加载器以及支持自定义插件的各种特性,从而使得我们可以更加高效地开发 GraphQL API。同时,由于它是一个 npm 包,因此我们也可以更加方便地在不同的项目中重复使用其代码。
附录:
graphql-typewriter 官网:https://github.com/AgentOneCoLtd/graphql-typewriter
GraphQL 概述:https://graphql.cn/learn/
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055fd981e8991b448dd69e