GraphQL 是一种新型的 API 查询语言,它可以帮助前端开发人员更方便地获取数据,减少不必要的网络请求。本文将介绍如何在 Node.js 中快速创建 GraphQL API 的最佳实践,并提供详细的学习和指导意义,并提供示例代码。
搭建基础环境
首先,我们需要安装 Node.js 和 npm。然后,在命令行中输入以下命令来初始化项目:
npm init -y
接下来,我们需要安装一些必要的依赖项,包括 express
、graphql
和 express-graphql
:
npm install express graphql express-graphql
定义数据模型
在 GraphQL 中,我们需要定义数据模型。我们可以使用 GraphQL SDL 来定义我们的类型系统,例如:
-- -------------------- ---- ------- ---- ---- - --- --- ------ ------- ------- ------- - ---- ------ - --- --- ----- ------- ------ -------- - ---- ----- - -------- ----- ---- ------ -------- ---------- ----- ------ -------- ---------- -
在这个例子中,我们定义了 Book
和 Author
类型,以及 Query
类型。Query
类型允许我们查询图书和作者,而 Book
和 Author
类型描述了它们的属性和关系。
定义查询解析器
一旦我们定义了数据模型,我们需要实现查询解析器来处理查询请求。查询解析器是一个函数,它接收查询请求并返回相应的结果。例如:
-- -------------------- ---- ------- ----- --------- - - ------ - ----- -------- ----- -------- -- - -- -- -- ------ ------ ---------------------- -- ------ -------- ----- -------- -- - -- ------ ------ --------------- -- ------- -------- ----- -------- -- - -- -- -- ------ ------ ------------------------ -- -------- -------- ----- -------- -- - -- ------ ------ ----------------- -- -- ------- - ------ -------- ----- -------- -- - -- ---- -- ------ ------ ------------------------------- -- -- --
在这个例子中,我们使用 resolvers
对象来定义查询解析器。对于每个查询,我们提供一个函数来处理它,并在函数体内调用适当的函数来获取所需的数据。
创建 GraphQL API
最后,我们需要将我们的 GraphQL API 暴露给客户端。我们可以使用 express-graphql
中间件来完成这项工作:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- --- - ---------- -------- ----------- ------------- ------- ------- ---------- ---------- --------- ----- -- -- ---------------- -- -- ------------------- ------- -- ---- --------
在这个例子中,我们创建了一个 Express 应用程序,并使用 graphqlHTTP
中间件将 /graphql
路由绑定到我们的 GraphQL API。我们传递了我们刚才定义的 schema
和 resolvers
对象,以及一个开发者工具 graphiql
。
总结
以上是在 Node.js 中创建 GraphQL API 的最佳实践。通过定义数据模型和解析器来处理查询请求,我们可以快速构建出一个完整的 GraphQL API。此外,我们可以使用 express-graphql
中间件轻松地将我们的 API 暴露给客户端。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65173e9695b1f8cacdf78695