使用 GraphQL 创建 Web API 的实践指南

阅读时长 6 分钟读完

随着 Web 应用的不断发展,前后端分离技术也越来越成熟,RESTful API 在 Web 开发中已经成为了最流行的 API 设计风格之一。然而,RESTful API 还存在一些比较麻烦的问题,例如:过度获取数据、多次请求以获得所需数据以及文档缺乏自描述等。因此,人们开始寻求其他更好的实现方案。GraphQL 就是一种解决方案。

GraphQL 是一种新的 API 查询语言,它采用 GraphQL 语言进行查询,返回精确的数据结果。GraphQL 是由 Facebook 开发的,它的目的是为了解决 RESTful API 难以解决的一些问题。GraphQL 将数据作为图形数据模型处理,以便可以查看数据之间的关系,并且允许客户端指定需要的数据。

在本文中,我们将探讨如何使用 GraphQL 创建 Web API,并提供一些实用的技巧以及最佳实践。

如何创建 GraphQL API

首先,我们需要安装一个 GraphQL 服务器,我们在这里选择最受欢迎的 Apollo Server

在项目中,我们需要遵循以下步骤:

Step 1:定义模式

使用 GraphQL,模式定义是 API 的重要组件之一。模式是一个图形,用于描述可用数据的形状和类型。GraphQL 使用类型声明来确保我们的 API 返回正确类型的数据。

-- -------------------- ---- -------
---- ----- -
  -------- ------ ----
-

---- ---- -
  --- ----
  ----- -------
  ------ -------
  ------ ------
-

---- ---- -
  --- ----
  ------ -------
  ----- -------
-
展开代码

在上面的示例中,我们定义了三个类型:QueryUserPostQuery 作为根类型,它包含所有可查询的字段。在 UserPost 中,我们定义了这些对象的属性,例如 idname 等。

Step 2:编写解析器

在定义了模式之后,我们需要编写与模式匹配的解析器来实现我们的 Web API。我们可以使用 JavaScript 来编写我们的解析器。

-- -------------------- ---- -------
----- --------- - -
  ------ -
    ----- ------ - -- -- -------- ----- -- -
      ------ ----------------------
    -
  --
  ----- -
    ------ ------ -- -
      ------ ---------------- ------- ------- --
    -
  -
--
展开代码

在上面的代码中,我们先定义了 resolvers 对象,里面包含了两个属性。Query 对象的 user 属性是一个函数,它接受四个参数,分别是请求的根对象、参数、上下文对象和信息对象。代码中,我们使用了 Mongoose(一个 Node.js 的 MongoDB 数据库驱动程序)来查找用户信息。

User 对象的 posts 属性也是一个函数,它接受一个用户对象作为参数,并返回与该用户相关的所有帖子。这里我们同样使用 Mongoose 查找 ObjectId 为其所属用户的所有帖子。

Step 3:启动服务器

完成了前两步,我们可以使用 Apollo Server 框架将我们的解析器与模式组合起来,以便最终创建 GraphQL API 服务器。

这个服务器可以运行在任何 Node.js 环境中,并提供了基本的错误处理和调试功能。

一些最佳实践

接下来,我们提供一些关于使用 GraphQL 的实用技巧:

分页

对于一个大型数据集,很少有情况下一次性返回一个结果集是最佳选择。GraphQL 使用游标分页(Cursor-based Pagination,CBP)来更好地支持大型数据集的分页。游标分页是一种从数据集的指定位置(游标)开始逐步查找项的 API。您可以通过传递游标参数和设置每页项目数来控制分页大小。

-- -------------------- ---- -------
---- ----- -
  ------------ ----- ------ ------- ----- ---- ------- -------- ---------------
-

---- -------------- -
  ------ ------------
  --------- ---------
-

---- -------- -
  ------- -------
  ----- -----
-

---- -------- -
  ---------------- --------
  ------------ --------
  ------------ -------
  ---------- -------
-

------ ------
展开代码

在上述示例中,users 的查询包含了 first 推荐列表,after 游标标记,last 倒序列表,before 反向游标标记,UserConnection 包含了查询结果的列表,PageInfo 用于描述当前查询页面的信息,定义了查询结果的元数据。要使用游标分页,确保指定默认分页大小,并使用每页最大大小的限制。

安全

在使用 GraphQL 构建 API 时,为确保安全,请将操作限制为安全数据库操作,例如查询并附加、仅列出单个请求之类的权限级别。通过控制哪些字段被返回,您可以实现对包含敏感信息(例如用户密码或安全配置)的对象的保护。

性能

在设计 GraphQL API 时,我们能够编写数据查询语句,以便仅返回在客户端需要的数据。这可以有效地提高性能,减少 API 响应时间。

缓存

在处理查询之前,请先检查给定查询是否已被缓存。如果查询已缓存,则我们可以从缓存中获取结果而无需重新评估查询。

结论

在本文中,我们介绍了如何使用 GraphQL 创建 Web API,包括定义模式、编写解析器和启动服务器。我们还提供了一些最佳实践和实用技巧,以确保我们的 API 安全、高效和可扩展。

虽然 GraphQL 相对较新,但它已经被越来越多的企业和 Web 开发人员接受,并成为了一个流行的选择。如果您是一名前端开发人员,那么学习并使用 GraphQL 将使您更具备竞争力,并开发出更优秀的 Web 应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676d485482fcee791c6672d3

纠错
反馈

纠错反馈