如何使用 GraphQL 实现 Webhook?

阅读时长 6 分钟读完

简介

一个 Webhook 是一种让用户持续接受服务器端事件的方式,允许用户将一个 URL 注册到任何对应事件的监听器中。当事件触发时,服务器会将信息 POST 到 URL。这允许用户在这个事件发生时执行自定义行为,例如发送电子邮件、记录日志等。

GraphQL 是一个强大的查询语言,它提供了一种灵活的方式来查询、筛选和组合数据。GraphQL 自带的类型系统使其更安全,而且有利于编写可维护的代码。在 GraphQL 服务器中使用 Webhook 可以让你实时接收到来自服务器端的数据。

在本文中,我们将深入了解如何使用 GraphQL 实现 Webhook。我们会基于 Express 框架,但这些示例同样适用于其他框架和 Web 应用程序。

步骤

1. 创建 GraphQL schema

首先,我们需要创建一个 GraphQL schema。此 schema 声明了我们的 web 钩子的查询和变更,以及创建 web 钩子所需的参数。

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

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

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

我们可以看到,我们的 Webhook 类型包含一个 ID、URL 和事件数组。而且我们声明了一个查询,允许列表中所有 Webhook 被检索。

2. 创建 Resolver

接下来我们需要创建 Resolver,这是一个返回响应的函数。在这个例子中,我们将 Resolver 与数据库交互,但是这仅在示例中。调用 Webhook mutations 时,我们将把自定义事件分发到事件总线或消息队列中。此外,我们将在添加 Webhook 时生成 GUID 并发送通知以确保 URL 可用。

下面是 createWebhook 和 webhooks 查询的 Resolver:

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

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

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

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

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

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

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

3. 生成 Webhook 通知

我们已经完成了声名和Resolver,我们需要确保在每次添加 web钩子时通知 URL。我们可以做到这一点并确保在 URL 失效时进行重试。

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

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

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

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

这个函数会不断进行相同请求,尝试与 URL 通信,如果 URL 返回错误,就等待 30 秒后再重试。

4. 编写 GraphQL API

我们现在可以编写 GraphQL API 了。我们将使用 express-graphql 架设我们的 API。在这个例子中,我们将请求和答复注册到应用。

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

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

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

现在,我们可以从 GraphiQL 询问列表中的所有 Webhook,或创建新的 Webhook:

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

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

这就是使用 GraphQL 实现 Webhook 的全部内容。

总结

在本教程中,我们了解了如何使用 GraphQL 实现 Webhook。我们讨论了创建 GraphQL schema、Resolver 和生成 webhook 通知所需的步骤。最后,我们编写了 GraphQL API 以查询和推向服务器。

GraphQL 是一个优秀的工具,它提供了灵活的方法来查询和组合数据。实现 Webhook 是 GraphQL 开发中的一部分,它使得服务器和客户端都可以更高效地与对方通信。在开发过程中,要确保 URL 对错误的处理和故障转移备份。

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

纠错
反馈