调用模块方法
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。 独立目标授权和应用方法白名单不再参与调用判定;已撤销凭据仍拒绝。
迁移使用字符串目标或旧服务方法路径的应用时,改用上面的模块对象调用,并按 迁移旧应用创建新版本。