npm 包 graphql-rate-limit 使用教程

前置知识

在继续阅读本文之前,您需要具备以下技术储备:

  1. 熟悉 JavaScript 语言
  2. 熟悉 GraphQL 开发模式
  3. 了解 npm 包管理工具

npm 包 graphql-rate-limit 简介

graphql-rate-limit 是一款基于 GraphQL 的限流工具,它可以帮助我们对 GraphQL 接口进行限流控制,防止接口被恶意攻击等。

该工具可以通过对 GraphQL 接口执行速度的计算,确定每个请求应被限制的速度,这样就可以将恶意用户的请求限制到特定速度,避免对服务器造成重大影响。

此外,graphql-rate-limit 还支持一系列高级特性,如多条件限制、限流错误提示等。

安装 graphql-rate-limit

安装该工具的方式非常简单,只需要在项目中执行以下命令即可:

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

安装之后,我们需要在 GraphQL 应用中引入该包并使用它进行限流控制。

下面,我们将详细介绍 graphql-rate-limit 的使用方法。

使用 graphql-rate-limit

引入 graphql-rate-limit

将 graphql-rate-limit 引入到您的项目中:

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

如果您使用了 Apollo Server,则可以直接将 createRateLimitDirective 作为参数传入 ApolloServer 的配置中。

创建限速指令

创建一个 @rateLimit 指令,它可以用来标记需要进行限速的 GraphQL 操作。这个指令的应用方法和 GraphQL 中的其他指令一样,您可以将它作为注释加入到操作的定义中。

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

在这个例子中,我们将 @rateLimit 指令添加到了 me 操作上,这将使得该操作在每 15 秒内最多只能被调用一次。

配置限速选项

createRateLimitDirective 中,您可以配置多种限速选项,例如:

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

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

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

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

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

上面这段例子中,我们使用 RateLimiterMemory 创建了一个限流器实例,并且使用一个自定义的 identifyContext 下钻到了请求的 context 中,以根据请求的信息进行限流。

除此之外,还有其他参数可以被用于控制限速,它们的详细说明可以在官方文档中找到。

限制请求速度

在 GraphQL 中,每个请求都可以包含多个操作,并且每个操作定义都可以被 @rateLimit 指令所注释。

在执行 GraphQL 操作之前,会先对该操作的速度进行计算,如果该速度超出了指定的限制范围,则不会执行该操作。

下面,我们来看一个例子,在这个例子中,我们定义了一个名为 slow 的 GraphQL 操作,这个操作的执行速度很慢,但我们设置了 @rateLimit 指令,以使得它每 5 分钟只能执行一次:

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

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

自定义限速错误

如果您希望在限速出现错误时返回自定义的错误信息,那么您可以为 createRateLimitDirective 函数的第二个参数传入一个回调函数,该回调函数可以处理错误信息并返回客户端得到的错误信息。

例如,下面这个例子中我们对默认信息进行了自定义处理:

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

此时,在客户端发生速率限制时,它将得到您自定义的错误信息,而不是系统内置的错误信息。

结语

本文介绍了 npm 包 graphql-rate-limit 的使用方法,您可以在 GraphQL 的应用中使用它来进行限流控制,避免恶意请求对服务器造成重大影响。如果您需要更多的限流控制选项,可以查看官方文档。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6006733f890c4f7277583631


猜你喜欢

  • npm 包 teqfw-core-app 使用教程

    介绍 teqfw-core-app 是基于 Vue 框架的前端应用框架,提供了一系列通用组件以及一些通用功能。这个框架主要是为了提高项目开发效率而设计的,它的核心思想就是使用代码复用来减少重复劳动和提...

    4 年前
  • npm 包 teqfw-core-all 使用教程

    前言 在前端开发过程中,使用 npm 包已经成为了不可或缺的一部分。不光是为了节省开发的时间,还为我们提供了许多强大的功能和工具。本篇文章将介绍一个名为 teqfw-core-all 的 npm 包,...

    4 年前
  • npm 包 @dfeidao/fd-w000026 使用教程

    简介 @dfeidao/fd-w000026 是一款基于 Vue.js 框架的前端 UI 组件库,包含了多种常用的 UI 组件,如按钮、文本框、下拉框、表格等。该组件库的设计风格简洁清爽,易于使用和扩...

    4 年前
  • npm 包 @dfeidao/fd-wh000009 使用教程

    前言 @dfeidao/fd-wh000009 是一款前端工具包,提供了多种工具类函数和组件,方便进行前端开发。本文旨在介绍该npm包的使用方法,帮助读者更好地了解和使用该包。

    4 年前
  • npm 包 @dfeidao/fd-wh000010 使用教程

    在前端开发中,我们通常会使用诸如 jQuery、React 等第三方库或框架来加速开发进程。而其中也有许多 npm 包,可以供我们使用。本文将介绍 npm 包 @dfeidao/fd-wh000010...

    4 年前
  • npm 包 @dfeidao/fd-wh000013 使用教程

    前言 在前端开发过程中,为了提高工作效率,很多开发者会使用各种工具包和库。其中,npm 包是一个非常常见的工具,它可以让我们轻松地引入一些常用的功能模块、样式库和插件等。

    4 年前
  • npm 包 @dfeidao/fd-wh000015 使用教程

    背景 @dfeidao/fd-wh000015 是一个前端开发中常用的 npm 包,它提供了一些常用的工具和方法,使得前端开发更加简单和高效。在本文中,我们将详细讲解如何使用该 npm 包。

    4 年前
  • npm 包 @dfeidao/fd-wh000014 使用教程

    简介 npm(Node Package Manager)是一种包管理器,可用于从开发者发布到公共注册表的命令行工具、库及框架等软件包中查找、安装和管理依赖项。本篇文章将介绍 npm 包 @dfeida...

    4 年前
  • npm 包 @dfeidao/fd-wh000016 使用教程

    什么是 @dfeidao/fd-wh000016 @dfeidao/fd-wh000016 是一个提供常用 UI 组件的 npm 包。它包含了各种常用的界面组件,如按钮、表单、菜单等等。

    4 年前
  • npm 包 relog 使用教程

    在前端开发中,日志是一个非常重要的调试工具,能够帮助我们快速定位问题所在,提高开发效率。npm 包 relog 是一个轻量级的 JavaScript 日志记录器。它提供了易用的 API 以及丰富的功能...

    4 年前
  • npm 包 @saltzmanjoelh/meteor-deployer 使用教程

    在 web 开发中,使用 Meteor 框架来创建实时 web 应用是较为常见的选择。而在将应用部署到云服务器时,手动部署是比较耗时且容易出错的。因此,使用自动化部署工具可以提高我们的工作效率和减少出...

    4 年前
  • npm 包 @rossoorg/password 使用教程

    介绍 @rossoorg/password 是一个用于生成密码的 npm 包,可以用于前端应用或 Node.js 应用中。此包支持生成具有高强度的密码,同时可自定义密码长度和字符类型。

    4 年前
  • npm 包 @smpx/slack 使用教程

    在现代的前端开发中,使用一些基础的 npm 包可以让我们的开发效率大幅提高。其中,@smpx/slack 这个包可以帮助我们在 Slack 上进行消息的推送和处理,非常实用。

    4 年前
  • npm 包 aliba 使用教程

    什么是 aliba? aliba 是一个基于阿里云的 Node.js 库。它封装了阿里云 OSS API,可以轻松地在 Node.js 项目中实现对阿里云 OSS 的访问和管理。

    4 年前
  • npm 包 @yincw/rework 使用教程

    简介 @yincw/rework 是一个基于 rework 的 CSS 处理器,可以对 CSS 进行修改和重构。它可以被用于前端项目中,作为构建工具的一部分,以便我们可以自动化地处理 CSS。

    4 年前
  • npm包nst-react-component使用教程

    nst-react-component是一个强大的组件库,可以帮助你开发高质量的React组件,极大提高了开发效率和代码质量。在本文中,我们将详细了解如何使用nst-react-component进行...

    4 年前
  • npm 包 hsuicomponent 使用教程

    简介 hsuicomponent 是一款强大的前端 UI 库,包含了丰富的 UI 组件,可大大提高前端开发效率,减少重复代码的编写。该库基于 Vue.js 构建,提供了众多易于使用的组件,如按钮、表单...

    4 年前
  • NPM包 rc-editor-jsonschema 使用教程

    在前端开发中,经常需要生成表单等界面元素。如果每次都手动编写表单的结构和验证规则,不仅繁琐而且容易出错。rc-editor-jsonschema就提供了一种快速生成表单的解决方案。

    4 年前
  • Vue-Access-Control 包使用指南

    在现代化的 Web 应用中,权限控制模块是其中必不可少的一部分。它们一方面可以管理和控制用户的操作,另一方面也可以保护 Web 应用防止恶意操作。Vue-Access-Control 是一个强大的 n...

    4 年前
  • npm 包 nodefswork 使用教程

    如果你是一名前端开发者,你一定不会陌生于使用 npm 包管理器以及各种常用的 npm 包。而今天要介绍的 nodefswork 包,将会给你带来惊喜。本文将会介绍 nodefswork 的使用方法,让...

    4 年前

相关推荐

    暂无文章