GraphQL 中的 resolvers 设计及最佳实践

阅读时长 4 分钟读完

GraphQL 是一种用于构建 API 的查询语言,它提供了一种更高效、更灵活、更强大的方法来获取数据,这是众多开发者所喜爱的。

GraphQL 使用 resolvers 来解决查询和数据获取的问题。它是一个函数,用于解析每个字段的值。resolvers 是非常重要的组件,本文将探讨 GraphQL 中的 resolvers 设计及最佳实践。

Resolver 的作用

Resolver 是 GraphQL 查询的关键,GraphQL 的工作方式是通过 Resolver 对象来实现的。Resolver 对象包含一个或多个函数,它们解析每个查询字段的值。

Resolver 主要用于执行查询的任务并从数据库或其他数据源中检索数据。当 client 发起查询时,GraphQL 会按照查询语句递归地调用 Resolver,直到它们获得了所有需要的数据,并将结果打包成一个单一的 JSON 对象返回。

Resolver 可以从多个数据源中获取和组合数据,可能不只从数据库中获取数据,也可以从 REST APIs、文件或其他数据来源中获取数据。Resolver 负责将这些数据转换成 GraphQL 的类型,并将其返回给客户端,这使得客户端代码更具灵活性和可重用性。

Resolver 的设计

Resolver 的设计应该包括以下因素:

参数

Resolver 的第一个参数是父级对象,父级对象是包含查询字段的父级对象。例如,当查询一个问题,其父级是用户。

后面的参数拥有两个参数:argscontextargs 是一个包含查询参数的对象。context 是上下文对象,其中包含有关查询的其他信息,包括用户身份验证信息。GraphQL 在调用每个 Resolver 函数时都会传递一个包含此上下文信息的 context 对象。

返回类型

Resolver 的返回类型应该是与查询字段的 GraphQL 类型一致的类型。例如,如果查询字段是字符串,则返回类型应该是字符串。

异步函数

通常情况下,将 Resolver 函数封装在一个异步函数中。这可以方便地从服务器中获取数据,并使用 Promises 控制异步操作的流程。

Resolver 中的最佳实践

以下是 Resolver 中的一些最佳实践:

小而精

保持 Resolver 小而精。Resolver 应该只处理与其名称相符的一个字段。这使得 Resolver 易于理解和维护,并且使它们更加具有重用性。

封装业务逻辑

将业务逻辑封装在 Resolver 中。Resolver 应该执行业务逻辑,并从数据库或其他数据源中检索数据,这样代码就更容易维护和重用。

错误处理

Resolver 应该能够处理所有可能的错误情况,并返回正确的错误代码和消息。一般来说,应该使用 GraphQL 的错误类型(GraphQL 的错误类型被设计为更具有信息量和更具体的错误)。

context 对象

Resolver 中的 context 对象应该包含有关查询的其他信息,包括用户身份验证信息。Resolver 对象将根据上下文对象中的用户信息来返回受保护的数据。

保持简单

保持 Resolver 的简单性。Resolver 应该是简单、干净的代码。最好的代码是不依赖于其他组件或外部库的代码,以便更轻松地维护和更新。

示例代码

以下是 Resolver 的一个简单示例:

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

在上面的代码中,我们定义了三个 Resolver 函数:

  • user Resolver 用于获取用户数据。
  • posts Resolver 用于获取用户的帖子。
  • updateUser Resolver 用于更新用户数据。

总结

在 GraphQL 中,Resolver 是解析语法的关键。它们主要用于执行查询的任务,从数据库或其他数据源中检索数据。Resolver 指导着 GraphQL 查询的行为,因此设计方式的合理性非常重要。在创建 Resolver 时,保持它们小而精、封装业务逻辑、处理错误等是一些最佳实践,可以使 Resolver 更加的灵活、可重用、可维护。

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

纠错
反馈