npm包:graphql-query-complexity 使用教程

阅读时长 4 分钟读完

GraphQL是一种用于API的查询语言,它提供了客户端与API之间通信的标准化方式。在GraphQL中,客户端可以通过查询来指定需要返回的数据,服务器则会根据这些查询返回相应的结果。然而,GraphQL的查询语句可以变得非常复杂,这会给GraphQL服务器带来很大的负担。这时候,我们就需要一个npm包来限制查询的复杂度。graphql-query-complexity就是这样一个npm包。

graphql-query-complexity可以用来限制客户端发起的查询的复杂性,从而避免GraphQL服务器负载过大。

安装graphql-query-complexity

要使用graphql-query-complexity,首先需要安装它。可以使用npm在命令行中安装。

使用示例

接下来,我们继续介绍如何使用graphql-query-complexity。我们将从一个最简单的示例入手。

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

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

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

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

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

这个例子告诉我们如何使用graphql-query-complexity来限制GraphQL查询的复杂度。我们首先创建了一个GraphQL模式,它描述了我们的查询端点。然后,我们创建了一个GraphQL服务器,它侦听在http://localhost:4000/graphql上。我们还设置了一个限制,如果查询复杂度超过10,限制就会触发。

这里我们调用createComplexityLimitRule来创建一个规则,并将该规则添加到validationRules数组中。createComplexityLimitRule的第一个参数是查询的最大复杂度,如果查询的复杂度超过这个值,限制就会被触发。第二个参数是一个选项对象,它接受一个onCost函数作为回调函数。我们可以在这个回调函数中打印出查询的复杂度。

当我们使用GraphQL客户端发送查询时,服务器将执行查询,并返回结果。如果我们破坏了复杂度限制,服务器将返回一个错误对象。

建议

对于查询规模特别大的项目,建议较小值,如5或7,作为GraphQL查询的最大复杂度。这会在查询性能和服务器负载之间提供平衡。此外建议加上日志系统,以便更好地了解查询复杂度的分布情况,以及识别哪些查询是造成服务器负载高的罪魁祸首。

结语

在GraphQL服务器中使用graphql-query-complexity是一个非常有效的手段,可以避免大量计算量给服务器带来的负担,并提高服务器的响应速度。使用这个npm包还是比较简单的,只需要按照上面的步骤进行配置即可。祝你愉快的GraphQL编程!

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

纠错
反馈