guide简介

# 保存协作数据

本指南介绍了四种读取协作会话内容并将其保存到永久存储中的方法,使用

  • 云服务 REST API – 服务器端解决方案,您的服务器可以向云服务协作服务器发送请求,以接收已编辑文档的内容并将其存储在您的数据库中。
  • 使用 Webhook 保存数据 – 服务器端解决方案,您的服务器接收包含文档内容的请求(Webhook),当协作会话结束时。
  • 文档存储 – 云服务解决方案,文档数据永久保存到 CKEditor 云服务服务器。
  • 自动保存插件 – 客户端解决方案,用户通过该解决方案定期将协作会话内容发送到您的服务器。

# 使用云服务 REST API 导出

这种机制基于 REST API,作为 自动保存插件 的替代方案。它改进并简化了同步存储在您数据库中的文档数据的过程。

使用此功能,保存当前文档数据的责任将从协作者转移到您的服务器。因此,您的服务器从 CKEditor 云服务获取文档的当前内容。

请比较显示数据工作流程的图表,以了解差异

Data handling in the new solution.

请求数量大幅减少 – CKEditor 云服务服务器和客户端服务器之间只有一个连接。服务器到服务器连接处理了提供和存储内容的全部责任。协作者的唯一作用是内容编辑。

# 使用云服务 REST API 的优势

  • 用户可以使用文档的最新版本。不存在 竞争条件、数据不一致或与文档同步相关的其他问题。
  • 减少到您服务器的请求数量。协作者不再需要按时间间隔发送文档数据。
  • 提高通信安全性。同步过程仅在您的服务器和 CKEditor 云服务服务器之间进行,使用加密的 SSL 连接和 请求签名
  • 保存文档数据的过程独立于用户工作时的网络条件。
  • 客户端服务器可以初始化协作会话中的内容。
  • 一次导出操作意味着只有一个文档内容,这使您可以节省一些存储空间并消除对文档版本的小更改。

有两种类型的导出

  • 文档导出 – 导出当前协作会话内容或文档存储内容(如果存在并且不存在当前协作会话),以及所有与文档相关的数据,例如评论和建议。查看 指南 以了解实施细节。
  • 协作导出 – 仅导出当前协作会话内容。查看 指南 以了解实施细节。

# 使用 Webhook 保存数据

这种方法类似于 REST API 使用,但主要区别在于请求的方向。使用 REST API 导出端点,您向云服务服务器发送请求,服务器使用已编辑文档的内容进行响应。使用 Webhook 时,您的服务器(或无服务器函数)会等待来自云服务服务器的请求。

要使用此功能,您应该在 CKEditor 生态系统仪表板云服务管理面板 中启用 Webhook,提供您服务器的 URL 并启用 collaboration.document.exported 事件。协作会话结束时,包含文档内容的请求将被发送到提供的 URL。有关详细信息,请参阅文档中的 Webhook 部分。此外,检查 与协作相关的其他 Webhook 事件,这些事件在使用 Webhook 保存文档数据时可能很有用。

协作会话在最后一个用户断开连接后 24 小时结束。如果您的应用程序需要在协作会话过期之前访问文档内容,则可以使用 冲洗方法 从云服务 REST API 手动删除协作会话。这也会触发 collaboration.document.exported Webhook。您也可以使用 collaboration.user.disconnected Webhook 事件来检查是否有用户连接,然后触发冲洗以在 collaboration.document.exported Webhook 中获取数据。请注意,这可能会影响 UX,当用户刷新页面或遇到某些网络问题时。建议使用去抖动或超时机制来涵盖短暂的协作会话断开连接。

# 文档存储

云服务还提供 文档存储 功能,允许您将文档数据永久保存到 CKEditor 云服务。在这种情况下,用于存储文档数据的客户端-服务器处理将被云服务服务器取代。这对重视速度和安全性的客户特别方便。当用户连接到已过期的协作会话的现有文档时,该文档会自动加载到新的协作会话中。

# 文档存储功能的优势

  • 减少到您服务器的请求数量。协作者不再需要按时间间隔发送文档数据。
  • 您的服务器完全免除了保存文档的责任。
  • 保存文档数据的过程独立于用户或您的服务器的网络条件。
  • 无需检查协作文档会话当前是否存在。
  • 如果协作会话已过期,则无需加载文档的当前内容。
  • 保存文档数据时没有 竞争条件问题
  • 文档以加密形式保存。
  • 可以通过 REST API 获取或删除存储中的文档,或获取文档列表。

查看 文档存储指南 以了解实施细节。

# 自动保存插件

在使用 自动保存插件 时,用户数据定期发送到客户端服务器,在那里可以对其进行处理、验证和存储在数据库中。请参见下面的图表以了解该过程的详细信息。

The workflow of the Autosave plugin.

虽然这种方法的实现最简单,但它也有一些缺点

  • 当许多用户同时处理同一文档时,存在竞争条件问题,您需要确保保存文档的最新版本。
  • 数据来自不可信来源(最终用户),可能会被操纵。
  • 打开以前编辑的文档时,用户需要从数据库中获取内容才能将其用作初始数据。
  • 它增加了到您服务器的请求数量和流量。
  • 它可能很慢,尤其是当大型文档由网络连接不佳的用户编辑时。

# 用数据初始化协作会话的方法

用户不会总是从空白编辑器开始,并在一次协作会话中完成文档。因此,需要使用先前保存的内容版本或一些生成的模板来初始化编辑器。类似于获取协作数据,您可以通过几种方式开始一个新的协作会话并加载您的内容。

  • 在编辑器配置中使用 initialData 属性 - 传递给此属性的内容将在用户打开编辑器时使用。如果协作会话已经存在,它不会覆盖数据。
  • 使用云服务 REST API 的 文档导入 - 您的服务器可以通过单个 API 调用在协作会话中初始化内容,包括所有评论和建议,然后用户可以连接到此协作会话。
  • 使用云服务 REST API 的 协作导入 - 您的服务器可以通过单个 API 调用在协作会话中初始化内容(不含评论和建议),然后用户可以连接到此协作会话。
  • 使用 文档存储 - 如果您启用了此功能,则打开先前编辑的文档将自动使用保存的内容进行初始化。

有关实施细节,请参考 导入和导出文档存储 指南。