GraphQL 是一种用于 API 的查询语言,它可以让开发者更精确、高效地获取数据。而 TypeScript 则是一种 JavaScript 的超集,它在静态类型检查和代码提示方面具有明显优势。本文将介绍如何使用 TypeScript 来开发 GraphQL API。
环境配置
在开始之前,我们需要先准备好开发环境。首先,需要安装 Node.js 和 npm,并创建一个新的项目目录。
mkdir my-graphql-api cd my-graphql-api npm init -y
然后,我们需要安装一些必要的依赖:
npm install graphql express express-graphql apollo-server-express @types/graphql @types/express @types/express-graphql @types/apollo-server-express typescript ts-node
其中,graphql
是 GraphQL 服务器的核心库,express
是一个流行的 Node.js 框架,express-graphql
和 apollo-server-express
是两种常用的 GraphQL 服务器实现,@types/graphql
、@types/express
、@types/express-graphql
和 @types/apollo-server-express
是 TypeScript 的类型文件,typescript
和 ts-node
则是 TypeScript 编译器和运行时工具。
完成依赖安装后,我们可以创建一个 TypeScript 配置文件 tsconfig.json
:
-- -------------------- ---- ------- - ------------------ - --------- ------ --------- ----------- --------- ------- --------- ----- ------------------ ----- ------------------- ------- ------------ ---- -- ---------- ---------------- ---------- ---------------- --------------- -
该配置文件中,我们将编译目标设置为 ES6,模块系统设置为 CommonJS,输出目录设置为 dist
,启用了 TypeScript 的严格模式以及模块解析模式,开启了 ES 模块与 CommonJS 模块之间的互操作性,并开启了源映射。
接下来,我们可以创建一个 src
目录,并在其中创建一个 app.ts
文件作为入口点:
-- -------------------- ---- ------- ------ - ------------ - ---- ------------------------ ------ ------- ---- ---------- ------ - ----------- - ---- ------------------ ------ ------ ---- ----------- ----- --- - ---------- ----- ------ - --- -------------- ------- --- ------------------- ------------- ------- --------- ----- ---- ------------------------ ---- ----- ---------- --- ---------------- -- -- - ------------------- ------- -- -------------------------------- ---
在该文件中,我们使用了 apollo-server-express
和 express-graphql
库创建了一个 GraphQL 服务器,并使用了 express
库创建了一个 Web 服务器,最后将 GraphQL 服务器和 Web 服务器整合在一起,并监听了一个端口号。
值得注意的是,我们通过 schema
参数将一个 GraphQL schema 对象传递给了 ApolloServer
和 graphqlHTTP
,这个 schema 对象包含了所有可用的查询、变异和订阅操作。
创建 GraphQL schema
一个简单的 GraphQL schema 由三部分组成:类型定义、查询类型和查询字段。定义这些内容可以使用 graphql
库提供的语法。
首先,我们需要导入必要的类型和函数:
import { GraphQLObjectType, GraphQLString, GraphQLNonNull, GraphQLSchema } from 'graphql';
然后,我们可以定义一个 Query
类型:
-- -------------------- ---- ------- ----- --------- - --- ------------------- ----- -------- ------------ ---- ---- ----- ------ ------- - ------ - ----- -------------- ----- - ----- - ----- --- ----------------------------- -- -- --------------- ----- - ------ ------- --------------- -- -- -- ---
在上述代码中,我们创建了一个名为 Query
的 GraphQL object 类型,并为其添加了一个 hello
字段,该字段的类型为 GraphQLString
,参数为一个 name
字符串,返回值为一个问候语,并且必须存在一个 name
参数。
接下来,我们可以创建并导出一个新的 GraphQL schema 对象:
export default new GraphQLSchema({ query: QueryType, });
运行应用程序
通过 TypeScript 编译器编译所有 TypeScript 代码:
npx tsc -p .
然后,在控制台中输入以下命令启动 Web 服务器:
node dist/app.js
现在,我们可以在浏览器中打开 http://localhost:4000/graphql
,并尝试运行一个查询:
{ hello(name: "world") }
这应该会输出如下结果:
{ "data": { "hello": "Hello, world!" } }
恭喜,你现在已经成功创建了一个基于 TypeScript 的 GraphQL API!
总结
本文介绍了如何使用 TypeScript 和 GraphQL 来构建一个 Web 应用程序,并利用 GraphQL 的查询语言解决了 API 的查询和类型约束等问题。在实际项目中,可以根据需求来添加更多的 schema 类型和字段,实现更高效、灵活的数据查询和更新。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645de0ac968c7c53b003e803