GraphQL 是一种用于 API 的查询语言,它是由 Facebook 开发的,并且已经被广泛地应用在前端领域中。Express.js 是一个流行的 Node.js Web 框架,它提供了许多有用的特性和插件,能够让我们轻松地构建 Web 应用程序。
在本文中,我们将介绍如何使用 Express.js 实现 GraphQL 接口,并且提供一些示例代码,希望对正在学习 GraphQL 和 Express.js 的前端工程师们有所帮助。
什么是 GraphQL?
GraphQL 是一种用于 API 的查询语言。与 REST API 不同,REST API 需要根据每个请求响应数据的缩略名,对外暴露所有的接口。GraphQL 允许客户端在一次请求中指定需要的数据,这样可以减少网络资源的浪费。
GraphQL 还有一个非常优秀的特性,那就是类型检查。GraphQL 定义了一个严格的类型系统,这个类型系统明确指定了每个字段的类型和返回值。这使得开发人员能够在编写代码时发现错误和避免问题。
Express.js 简介
Express.js 是一个流行的 Node.js Web 框架,它提供了许多有用的特性和插件,能够让我们轻松地构建 Web 应用程序。Express.js 的特点之一就是轻量级,它专注于提供基本的功能,而不是强制用户使用一些工具和处理器。
在我们开始编写 GraphQL 接口之前,需要安装一些工具和依赖项。在终端中输入以下命令进行安装:
npm install express express-graphql graphql
上述命令将安装 Express.js、GraphQL 和 express-graphql 依赖项。现在,我们来编写一个简单的 Express.js 应用程序,该应用程序将提供 GraphQL 接口。在 app.js 文件中,写入以下代码:
// javascriptcn.com 代码示例 const express = require('express'); const graphqlHTTP = require('express-graphql'); const { buildSchema } = require('graphql'); // 创建一个 GraphQL schema const schema = buildSchema(` type Query { hello: String } `); // 根据 schema 定义,编写 resolver 函数 const root = { hello: () => { return 'Hello World!'; }, }; // 创建一个 express 实例 const app = express(); // 创建一个 GraphQL endpoint app.use( '/graphql', graphqlHTTP({ schema: schema, rootValue: root, graphiql: true, // 启用 GraphiQL }) ); // 启动服务器 app.listen(4000, () => { console.log('Running a GraphQL API server at http://localhost:4000/graphql'); });
在上述代码中,我们首先创建了一个 GraphQL schema,该 schema 定义了一个查询类型为 Query,该查询类型具有一个名为 hello 的字段,返回类型为 String。接下来,我们创建了一个简单的 resolver 函数,它返回一个包含字符串“Hello World!”的对象。
在 app.js 文件中,我们还需要创建一个 express 实例,并在其中添加一个 GraphQL endpoint。我们使用 express-graphql 中间件,该中间件将 schema 和 resolver 对象传递给 GraphQL 函数。除此之外,我们还添加了一个 graphiql 选项,用于启用 GraphiQL,这是一个用于在浏览器中测试 GraphQL 查询的 IDE。
现在,我们可以运行应用程序,并在浏览器中访问 http://localhost:4000/graphql。在 GraphiQL 界面中,我们可以查询 hello 字段,返回一个字符串“Hello World!”。
总结
本文介绍了如何使用 Express.js 实现 GraphQL 接口的基础知识,并演示了一个简单的示例。通过这篇文章,读者应该能够理解 GraphQL 和 Express.js 的基本概念,并通过自己编写代码进行实践。GraphQL 是一个非常有用的工具,它可以帮助我们有效地管理 API,并将前端 Web 开发带入了一个新的阶段。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6544870a7d4982a6ebe5fcdc