1. 09. 核心模型
石墨文档中台-开发文档
  • 1. 适用范围
  • 00. 概述
    • 石墨文档中台能做什么?
    • 三种典型的业务接入场景
    • 石墨文档中台支持哪些格式?
  • 01. 快速开始
    • 基本概念
    • 场景一:10 分钟创建预览文件
    • 场景二:10 分钟创建协同编辑文件
  • 02. 鉴权与安全
    • 整体概述
    • 签名凭证 Token
    • 签名凭证 Signature
  • 03. 文件预览
    • 整体概述
    • 如何预热预览缓存
    • 如何防盗链
    • 常见问题处理
  • 04. 文件编辑
    • 整体概述
    • 协同文档权限设计
    • 协同文件保存与更新机制
    • 协同文件复制与删除
  • 05. 文件导入导出
    • 整体概述
    • 常见问题处理
  • 06. 石墨前端 API
    • 整体概述
    • 公共 API
      • 公共处理方法
      • 顶部栏定制 HeaderBars
    • 编辑器 API
      • 轻文档
      • 传统文档
      • 表格
      • 幻灯片
      • 表单
      • 应用表格
  • 07. 石墨后端 API
    • 整体概述
    • 错误码说明
    • 文件-预览 API
      • 访问预览文件
      • 创建文件预览缓存
    • 文件-协同编辑文件管理 API
      • 访问协同编辑文件
      • 创建协同文件
      • 创建协同文件副本
      • 删除协同文件
    • 文件-导入导出 API
      • 文件导入
        • 文件导入说明
        • 创建导入任务
        • 获取导入进度
        • 创建导入任务(旧版)
        • 获取导入进度(旧版)
      • 文件导出
        • 文件导出流程
        • 创建导出任务
        • 获取导出进度
    • 文件-表格文件(Excel) API
      • 表格接口参数说明
      • 获取表格内容
      • 获取表格中的评论数
      • 更新表格内容
      • 追加表格内容
      • 删除表格行
      • 新增表格工作表
    • 文件-文稿文件(Word) API
      • 文稿书签说明
      • 读取文稿书签内容
      • 替换文稿书签内容
    • 文件-文档文件(类 Markdown) API
      • 获取文档中的评论列表
    • 文件-应用表格文件(多维表格)API
      • 应用表格列及单元格值结构
      • 应用表格接口调用规则
      • 获取数据表列表
      • 创建数据表
      • 获取字段列表
      • 创建字段
      • 更新字段
      • 删除字段
      • 新增行
      • 获取单行
      • 更新行
      • 删除行
    • 文件-获取额外信息 API
      • 获取文件的纯文本内容
      • 文件纯文本字数统计
      • 获取文件的历史列表
      • 获取文件的版本列表
      • 获取文件内容中所有的 @ 人信息列表
      • 还原文件历史版本
    • 系统管理 API
      • 应用管理
        • 获取应用详情
        • 更新应用回调地址
      • 用户席位管理
        • 用户席位状态说明
        • 获取用户列表和席位状态
        • 激活用户席位​
        • 取消用户席位​
        • 批量设置用户席位
    • 其他 API
      • 上报事件
      • 创建行为历史
      • 推送文件内全部的用户
      • 推送用户全部的 websocket 连接
    • 获取行列表
  • 08. 回调接口(你的应用需实现的接口)
    • 整体概述
    • 文件信息
      • 文件权限说明
      • [重要] 获取文件元信息-协同文档
      • [重要] 获取文件元信息-预览文档
      • 获取当前用户的文件列表
      • 获取文件的协作者列表
      • 获取接入方指定文件的完整访问地址
      • 获取文件元信息-协同文档自动任务(admin)
      • 根据指定用户获取文件元信息-协同文档(admin)
    • 用户信息
      • 批量获取用户信息(admin)
      • [重要] 获取当前用户信息
      • 获取当前用户所在团队信息
      • 获取指定用户信息
      • 获取用户水印信息
      • 获取用户部门路径
      • 批量获取用户信息
    • 团队和部门
      • 特殊部门 ID 说明
      • 获取团队下的成员列表
      • 获取部门信息
      • 获取部门的下级部门节点
      • 获取部门下的成员分页列表
    • 搜索功能
      • 获取与文件相关的用户列表
      • 获取与文件相关的文件列表
      • 按关键字搜索文件和用户列表
    • 事件推送
      • 整体概述
      • 评论(Comment)
        • 轻文档
          • 添加评论
          • 删除评论
          • 结束评论
          • 对于评论的回复评论
        • 表格
          • 添加评论
          • 删除评论
          • 结束评论
          • 对于评论的回复评论
        • 传统文档
          • 对于评论的回复评论
          • 添加评论
          • 更新评论
          • 删除评论
        • 幻灯片
          • 添加评论
          • 删除评论
          • 结束评论
          • 对于评论的回复评论
        • 应用表格
          • 添加评论
          • 对于评论的回复评论
          • 删除评论
      • 讨论(Discussion)
        • 轻文档
          • 发送讨论消息
      • 提及(MentionAt @ 人)
        • 轻文档
          • 在评论中 at
          • 在讨论中 at
          • 在正文中 at
        • 表格
          • 在评论中 at
          • 在正文中 at
        • 传统文档
          • 在评论中 at
          • 在正文中 at
        • 应用表格
          • 在评论中 at
          • 在正文中 at
      • 日期提醒 (DateMention)
        • 轻文档
          • 创建
          • 修改
          • 删除
        • 表格
          • 创建
          • 修改
          • 删除
        • 传统文档
          • 创建
          • 修改
          • 删除
      • 文件内容更新 (FileContent)
        • 文件内容更新
      • 文档协作者协同状态变化 (Collaborator)
        • 文档协作者协同状态变化
      • 文件版本 (Revision)
        • 版本
      • 系统事件 (System)
        • 系统事件
      • 回调请求错误(实验性)
        • 回调请求错误
  • 09. 核心模型
    • 你的应用如何设计应用(app)模型?
    • 你的应用如何设计文件数据模型?
    • 你的应用如何设计通讯录模型?
    • 你的应用系统如何设计文件权限模型?
  • 10. 典型场景方案
    • 云盘场景
    • IM 场景
    • 示例代码仓库
  • 11. 常见问题
    • 访问接口提示 Signature
    • 文件预览或导入报错
    • 首次接入 SDK 报错
    • 文档预览如何做防盗链
    • 复制粘贴、全屏操作不正常
    • 如何实现文档模板功能
    • 文档内容何时保存
    • 移动端不支持 blob 协议导致预览失败
    • 如何实现文件重命名
    • 如何通过接口修改文档内容
    • @人员时如何直接跳转至对应锚点
  1. 09. 核心模型

你的应用如何设计应用(app)模型?

应用是什么?#

应用(app)是接入方系统在石墨文档中台中的“接入身份”和“配置载体”。可以把它理解成“你的业务系统在石墨里的注册记录”。
当业务系统调用石墨后端 API、前端打开编辑器/预览页、或者石墨回调业务系统接口时,石墨都会基于这个 app 来判断:
这次请求属于哪个接入方。
允许使用哪些能力和文件类型。
应该回调到哪个业务系统地址。
当前 license、席位和有效期是否允许继续服务。
一个 app 通常会绑定以下核心配置:

鉴权配置#

appId:公开标识,用于指向具体哪个应用。
appSecret:指定应用的私有密钥,只能放在你的业务系统后端。
这部分决定“你是否能以这个 app 的身份调用石墨接口”。这两个配置在你的系统接入石墨文档中台前,由石墨侧提前申请好后提供给你。

回调配置#

endpointUrl: 石墨回调接入方的统一入口地址。
这个 endpointUrl 是你系统实现的所有回调接口的 BaseURL,所有的回调接口需要使用 endpointUrl 这个公共前缀。
回调接口实现:包括当前用户、指定用户、文件元信息、权限、搜索、事件等能力接口。
回调地址的可达性和稳定性:石墨服务端必须能访问,且升级或迁移时要保证兼容。
这部分决定“石墨在运行时如何反向读取你的业务上下文”。这个配置是你来决定,你定义好具体的回调地址 endpointUrl 后,通过 更新App回调地址 这个接口通知到石墨文档中台。

应用(app)和“租户”有什么区别?#

在接入石墨文档中台的系统设计中,最容易混淆的是把 app、租户、用户、文件混成同一层概念。它们其实分别解决不同问题:
应用(app):接入方系统在石墨中的身份,用于鉴权、能力控制和回调路由。
租户:接入方业务系统中的数据隔离单元,例如一个企业客户、一个学校、一个组织。
用户:租户下的业务账号,石墨通过回调读取其展示信息和权限。
文件:由接入方定义和维护的业务对象,石墨只根据 fileId 回调查询,不替接入方维护业务“租户”数据。
一个常见模型是:
一个 应用(app) 服务多个租户。
每个租户下有自己的用户、文件、权限和组织架构。
石墨通过 app 找到接入方,再通过 token、fileId 和回调接口进入某个具体租户上下文。
如果你的业务要求“不同客户完全独立,连配置、回调地址、席位也要分别管理”,也可以考虑为不同环境或不同业务线拆分多个 app。但在多数 SaaS 场景里,更常见的是“一个 app + 多租户业务数据隔离”。

应用(app)和租户如何配合?#

可以把职责分工理解成下面两层:
应用(app)层负责“接到石墨这边来的是谁”。
租户层负责“这个请求在你自己的业务系统里属于谁、能看什么、能做什么”。
实际请求链路里通常是这样协作的:
1.
业务后端以某个 app 的身份生成 signature,并把 appId、signature、token、fileId 交给前端或用于服务端调用。
2.
石墨收到请求后,知道这是哪个 app 发起的请求,并按该 app 的配置决定可用能力和回调目标。
3.
石墨回调接入方接口时,会带回 X-WebOffice-Token 或其他上下文。
4.
接入方后端再根据 X-WebOffice-Token 识别当前用户、租户和权限,并返回该租户下的文件、用户、组织等信息。
这里要特别注意:token 不是 app 的静态配置,而是某次具体访问的业务凭证。它负责把“应用身份”进一步定位到“当前租户 + 当前用户 + 当前会话”。

常见误区#

把 app 当成租户。app 解决的是“接入身份”,不是“业务数据隔离”。
把 token 当成 app 配置。token 更适合表达一次访问的业务上下文,而不是应用静态信息。
只校验 fileId,不校验租户和用户。这样最容易造成跨租户读到错误文件。
前端直接持有 appSecret。appSecret 只能保存在服务端。
只关注接口是否能调通,不关注回调返回的数据是否来自同一租户、同一组织和同一权限模型。
修改于 2026-06-22 02:43:30
上一页
回调请求错误
下一页
你的应用如何设计文件数据模型?
Built with