百积木文档
开发指南平台应用、模块与 Bundle 开发平台应用开发

调用模块方法

SDK 10 通过同包模块键和 App Gateway 调用同包 Module,区分参数信封与业务错误。

平台应用浏览器统一通过标准 SDK 与 App Gateway 调用 Module。本文适用于 SDK 10.2.0 与作者配置 7.3.0; 初始化、PKCE 和同源配置见Web 接入与运行态调用。

调用协议

POST /app-gateway/api/workspace-runtime/apps/{installId}/invoke
Authorization: Bearer {appClientToken}
Content-Type: application/json

上例是公共 SaaS 的路径形态;实际前缀来自同源配置的 appGatewayApiBase。 installId 与 token 来自当前 SDK 会话。请求中的 target 是包含 moduleKey 和可选 propertyKey 的对象,method 是目标方法名。

请求参数

{
  "target": {
    "moduleKey": "course-directory"
  },
  "method": "createCourse",
  "params": {
    "code": "COURSE-001",
    "name": "高等数学",
    "teacherId": 123,
    "tags": [
      "必修",
      "一年级"
    ]
  }
}

params 是方法参数对象,其字段与当前 paramDefinitions 一一对应。无参数方法显式传 {};必填、类型和数组结构 按方法定义校验。浏览器不提交 userId、Runtime service、具体 businessId、资源对象或模块凭据。 methodBody 只描述 Module 内部访问后端的实现,不属于前端调用合同。

机器可读示例:调用请求、 完整作者配置。

直接调用

应用与 Module 必须属于同一个 Bundle。应用清单无需声明 targets 或方法名单:

const course = await client.call(
  { moduleKey: "course-directory" },
  "createCourse",
  { code: "COURSE-001", name: "高等数学", teacherId: 123, tags: ["必修", "一年级"] },
);

方法名和字段为合同示意,执行前回读目标 Runtime 的真实方法;不能仅凭文档示例认定某个服务已安装。 调用属性能力时使用 { moduleKey: "course-directory", propertyKey: "catalog" }。模块键和属性键从真实模块合同读取;后端从应用身份补齐 Runtime、来源环境和 Bundle,并向 RCS 查询当前实际入口。

查询当前工作区用户

使用目标 Module 已定义的成员查询方法。方法从经过验证的调用上下文取得当前工作区和当前用户, 不接受页面传入的 workspaceId 或 userId 作为身份。跨包成员能力接入见 查询工作区成员示例与迁移。

响应和会话

client.call() 严格解析 CModel 并返回 data,包括方法允许返回的 null;业务失败保留真实 errorCode 和错误数据。 应用先依照 SDK 的 getSession() 判断是否需重新授权,再处理方法业务错误,不自动重放请求。

SDK 仅在 CModel errorCode 为 APP_GATEWAY_UNAUTHORIZED,或非 CModel 响应的 HTTP 状态为 401 时清除会话。 合法 CModel 业务 UNAUTHORIZED 即使伴随 HTTP 401 也保留会话。参数错误、目标不存在、权限拒绝和网络失败分别处理。

执行边界

一次调用要求 token 属于本次安装、应用已启用且有有效来源凭据、同包 Module 在当前 Runtime 存在, 并满足方法合同、来源认证与当前用户权限。前端不能指定其他 Runtime、来源环境或 Bundle。 独立目标授权和应用方法白名单不再参与调用判定;已撤销凭据仍拒绝。

迁移使用字符串目标或旧服务方法路径的应用时,改用上面的模块对象调用,并按 迁移旧应用创建新版本。

本页内容