在 Headless CMS 中使用 Webhooks 实现内容同步

在现代的 Web 开发中,前端和后端的分离已经成为了一种趋势,由此引出的无头 CMS (Headless CMS) 的概念也逐渐被广泛接受,Headless CMS 常被戏称为提供内容 API 的 CMS。

但是,如果你在使用 Headless CMS 的过程中,遇到了不同的站点之间需要同步内容的问题,Webhooks 就是一个很好的解决方案。

什么是 Webhooks

Webhooks 可以理解为在特定事件发生时,把某些信息传递给指定的 URL 的一种方式。如果你已经玩过 GitHub 的 Webhooks,就不难理解这个概念。

通过使用 Headless CMS 提供的 Webhooks 功能,我们可以在多个站点之间实现内容的同步。

在跨站点内容同步方案中,我们需要一个目标站点,它会在其中定义一个负责接收内容更新事件的 URL,这个 URL 就是 Webhooks。

如何实现

在 Headless CMS 中,这个过程通常分为以下几个步骤:

1. 创建 Webhooks

我们可以在 Headless CMS 的控制面板中创建 Webhooks,通常需要填写 URL 和触发时机(比如发布/取消发布、保存/更新)等信息。

假设您使用的是 Strapi,则 canary 版本(4.x)以上的 Strapi 已经内置了 Webhooks 模块,您可以在插件选项中查看是否启用,默认使用了 NPM 的 @strapi/webhooks 模块。

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

2. 配置事件处理程序

接下来,您需要在目标站点中为 Webhooks 注册一个事件处理程序,并将其绑定到 Webhooks。

在 Strapi 中,事件处理程序是使用钩子(hook)的形式实现的。因为使用了钩子,开发者可以轻松地在任何 Strapi 应用程序中添加自定义代码。

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

在 Strapi 中,事件对象是一个数组,其中包含更新的实体类型和 ID。

如果我们要从源站点 A 同步文章内容,需要获取到更新前和更新后的文章实例,然后将更新后的内容发布到目标站点 B。

在示例中,我们使用了 Axios 模块来发送 POST 请求。在实际开发中,我们也可以使用其他方法来发送 HTTP 请求。

3. 接收来自 Headless CMS 的 Webhooks 事件请求

当文章在来源站点 A 中更新时,Headless CMS 将发送 Webhooks 请求到目标站点 B。目标站点 B 将处理并响应每个事件请求。

在 Express.js 中,我们可以使用一个适当的插件(例如 body-parser)来解析来自 Headless CMS 的 Webhooks 请求中的数据,并为其定义一个完整的路由。

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

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

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

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

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

学习和指导意义

使用 Webhooks 实现内容同步有很多好处,其中包括节约时间和劳动力,并使您对站点之间内容同步的控制更加直接。

Webhooks 还可以使您的团队更好地协作。例如,在一个多人团队中,我们可能需要一个人将所有文章清单放在博客站点中,还需要另一个人将所有文章信息清单放入文档站点中。

此外,使用 Webhooks 同步内容还可以实现站点的统一和标准化。当您需要将某种格式的内容设置为站点之间的共享方式时,Webhooks 是一个理想的选择。

最后,使用 Webhooks 可以帮助您更好地组织和管理您的站点。例如,如果您有多个 Strapi 实例,您可以使用 Webhooks 在所有实例之间同步数据,这使得使用 Headless CMS 更容易管理和维护。

示例代码

下面是一个简化的示例:

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

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

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

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

结论

Webhooks 提供了一种灵活和强大的方式来同步内容和数据,使得使用 Headless CMS 更加强大和多功能。实际上,使用 Webhooks 可以在多个站点之间使内容同步变得更加简单和直观。

对于使用 Headless CMS 的站点,Webhooks 的使用不仅仅是实现跨站点内容同步,而且还可以用于实现 Web 应用程序的各种事件处理需求,例如往 Slack 发送通知、自动化部署等。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6731c5bb0bc820c5823a532f