GraphQL 是现代 Web 应用程序所使用的新一代 API 查询语言。它允许你以一种灵活的方式描述你的数据要求,并从服务器获取精确的响应。与传统 REST API 相比,GraphQL 有很多优点,如无需创建多个端点来调用不同的资源,更好的错误处理,以及更少的数据传输。本文将探讨如何使用 Node.js 和 GraphQL 来构建完善的 API 接口系统。
为什么选择 Node.js 和 GraphQL
Node.js 是一种可扩展的服务器端的 JavaScript 运行环境,它的主要优点是其高效的异步 I/O 操作,以及大量的第三方模块,这样可以更快速地实现项目。GraphQL 则提供了更加灵活和高效的查询方式,并且具有诸多优点,与传统的 REST API 非常不同。
安装 Node.js 和 GraphQL
如果你使用的是 Linux 或 Mac 系统,你可以使用 Homebrew 安装 Node.js。在终端中输入以下命令:
brew install node
安装 GraphQL 的最佳方式是使用 npm(Node.js 的包管理器)。在终端中,输入以下命令来安装 GraphQL 依赖项:
npm install graphql express-graphql
设计图形模式
GraphQL 是一种 API 查询语言,它允许客户端指定需要返回的数据。为了实现一个 GraphQL API,首先需要设计一个数据模型。这个模型提供了查询的入口点以及与数据的交互。对于一个基于 Node.js 的 GraphQL API,通常使用 Mongoose 或 Sequelize 来连接数据库。
比如我们要创建一个简单的书籍管理系统,定义一个 Book 数据类型,包括书名、作者、出版日期等属性以及增删查改的 Mutation,可以这样定义该模型:
-- -------------------- ---- ------- ---- ---- - --- --- ------ -------- ------- -------- -------------- -------- ----------- ------ - ---- ----- - ------ ------ -------- ----- ---- - ---- -------- - ----------------- -------- ------- -------- -------------- -------- ----------- -------- ----- -------------- ---- ------ -------- ------- -------- -------------- -------- ----------- -------- ----- -------------- ----- -- -
创建服务器程序
使用 Express 可以轻松地创建一个用于 Web 应用的服务器。我们可以通过这个服务器将 GraphQL 添加到应用程序中,并将数据模型绑定到 GraphQL 客户端。
-- -------------------- ---- ------- --- ------- - ------------------- --- ----------- - --------------------------- --- - ----------- - - ------------------- --- ------ - ------------- ---- ---- - --- --- ------ -------- ------- -------- -------------- -------- ----------- ------ - ---- ----- - ------ ------ -------- ----- ---- - ---- -------- - ----------------- -------- ------- -------- -------------- -------- ----------- -------- ----- -------------- ---- ------ -------- ------- -------- -------------- -------- ----------- -------- ----- -------------- ----- -- - --- --- ---- - - ------ -------- -- - ------ ------------------- -- ----- -------- -- -- -- - ------ --------------------- -- ----------- -------- -- ------ ------- -------------- ---------- -- - ------ ----------------------- ------- -------------- ----------- -- ----------- -------- -- --- ------ ------- -------------- ---------- -- - ------ -------------------- ------ ------- -------------- ----------- -- ----------- -------- -- -- -- - ------ -------------------- - -- --- --- - ---------- ------------------- ------------- ------- ------- ---------- ----- --------- ---- ---- ---------------- -- -- ---------------- ------ -- --------------------------
在上面的代码中,我们定义了一个 root 对象,该对象提供了查询和修改数据的方法。我们还使用 graphqlHTTP
函数为服务器配置了一个路径,允许我们将 GraphQL 请求发送到服务器。
数据库连接
使用 Mongoose 实现连接 mongodb 数据库,这里提供一个完整的例子片段:
-- -------------------- ---- ------- --- -------- - -------------------- ------------------------------------------------------ ------------------------------- --------------------------- ----------- ---------- -------------------------------- -------- -- - ---------------------- -- ------------ --- --- ---------- - ----------------- ------ ------- ------- ------- -------------- ------- ----------- ------ --- --- ----- - ---------------------- ------------ ---------------- - -------- ------- ------- -------------- ----------- - ------ --- ----------------- ------- -- - --- ---- - --- ------- ------ ------- -------------- ---------- --- --------------- ----- -- - -- ----- ------------ ---- -------------- --- --- -- ----------------- - -------- -- - ------ --- ----------------- ------- -- - -------------- ----- ------ -- - -- ----- ------------ ---- --------------- --- --- - ----------------- - -------- ---- - ------ --- ----------------- ------- -- - ------------------ ----- ----- -- - -- ----- ------------ ---- -------------- --- --- -- ---------------- - -------- ---- ------ ------- -------------- ----------- - ------ --- ----------------- ------- -- - --------------------------- - ------ ------- -------------- ---------- -- - ---- ---- -- ----- ----- -- - -- ----- ------------ ---- -------------- --- --- -- ---------------- - -------- ---- - ------ --- ----------------- ------- -- - --------------------------- ----- ----- -- - -- ----- ------------ ---- ----------------- --- --- --
查询数据
接下来,我们可以使用 GraphQL 来查询数据。
query { books { id title publishedDate } }
这个查询将获取所有书籍的 ID、书名和出版日期,你可以根据自己的需要定制返回的属性。还可以通过添加参数来过滤结果。
query { book(id: "5c1a42b16fce339995e2b1ff") { id title author publishedDate } }
这个查询将返回 ID 为 5c1a42b16fce339995e2b1ff 的书籍的详细信息。如果没有找到书籍,则返回 null。
修改数据
在 GraphQL 中,修改数据使用的是 Mutation。你可以使用 Mutation 类型来定义修改数据的函数,然后通过在请求体中添加 args 参数来调用它们。
mutation { createBook(title: "The War of the Worlds", author: "H. G. Wells", publishedDate: "1898-01-01", coverImage: "") { id title author publishedDate } }
这个 Mutation 将创建新书并返回书籍的详细信息。
同样,对于更新和删除数据也可以使用 mutation,这里不再赘述。
总结
本文介绍了如何使用 Node.js 和 GraphQL 来构建完善的 API 接口系统。我们学习了如何设计数据模型、使用 Express 创建服务器程序、连接数据库、查询数据和修改数据。使用 GraphQL 来构建 API 接口系统提供了更灵活、更高效的方式,具有更好的可靠性和易用性。
你可以在 GitHub 上找到这个例子的完整实现代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/652e2cfb7d4982a6ebf3a7a0