调用其他应用
调用其他应用:沿用平台当前公开 SDK 合同,区分本地模拟、联网调试与正式运行。
先在调用方 .jusp/app.yaml 声明目标应用的 appKey、apiVersion 和能力;目标应用在自己的 integrations 中声明同一 API 版本和能力。正式运行使用当前用户 RuntimeSession 签发 grant;联网调试使用 CLI 注入的、绑定所选本人或获准测试账号及调用方版本的调试会话申请授权。开发者负责操作与审计,所选账号决定真实数据权限和计费。正式调用和联网中转面向已激活的提供方;双本地联网则通过明确配对直接调用本地提供方,不部署应用。联网调试都要求能力明确允许调试。
下面用聚算可觅维护的 integration.probe 无业务回显接口说明链路;它只验证版本、授权、摘要和路由,不读取或修改可觅项目。真实业务必须改用被调应用自己的 OpenAPI 和领域 SDK,平台 SDK 不提供项目、画布或创作方法。
示例中的 coommc_sdk 来自聚算可觅开发者维护的私有领域包,不属于 jusp-platform-sdk;其兼容版本和业务方法以可觅 OpenAPI/发行说明为准。
本地联调
提供方先启动自己的本地假服务或真实开发服务,调用方再通过 CLI 绑定已声明依赖:
jusp app dev --local --app-key videoforge \
--dependency coommc=http://127.0.0.1:9080 \
-- python run_videoforge.py本地地址只允许回环网卡。调用方业务代码读取提供方业务 SDK;该 SDK 从 CLI 注入的依赖映射选择本地地址,不把地址写进源码。
from coommc_sdk import CoommcClient
from jusp_sdk.runtime import AppGrantClient
grants = AppGrantClient(app_key="videoforge")
coommc = CoommcClient.for_probe(grants=grants)
result = coommc.probe(session, "hello", idempotency_key="probe-local-1")
assert result.source_channel == "local"联网调试
from coommc_sdk import CoommcClient
from jusp_sdk.runtime import AppGrantClient
grants = AppGrantClient(app_key="videoforge")
coommc = CoommcClient.for_probe(grants=grants)
result = coommc.probe_debug(
"hello",
idempotency_key="probe-1",
)
print(result.status, result.echo, result.source_channel)
coommc.close()
grants.close()用下列命令启动上述代码:
jusp app dev --online \
--app-id <VideoForge应用ID> \
--version-id <包含coommc依赖声明的候选版本ID> \
-- python debug_interapp.py平台验证候选版本依赖、目标生产版本开放能力和请求摘要后,只签发两分钟、单请求授权。目标应用的内部地址和平台托管身份不会下发到开发者电脑。
需要让两个真实本地应用共享身份、授权与一次性跳转时,使用 CLI 双应用联调教程,不要各自启动互不相通的模拟器。双本地联网使用 --receive-from 和成对的 --dependency/--receiver;双方分别授权同一获批测试用户,成功来源为 developer_local。API 与错误字典见 RuntimeSession 与应用间授权参考。
正式运行
调用方 VideoForge;这里仍用无业务探针演示生产 grant,真实项目方法由可觅 SDK 自己维护:
from coommc_sdk import CoommcClient
from jusp_sdk.runtime import AppGrantClient
grants = AppGrantClient(app_key="videoforge")
coommc = CoommcClient(
base_url="<平台注入的可觅依赖地址>",
grants=grants,
)
result = coommc.probe(
session, "hello",
idempotency_key="probe-1",
)
print(result.echo)被调用方可觅:
from jusp_sdk.runtime import AppGrantClient
grants = AppGrantClient(
app_key="coommc",
)
resolved = grants.resolve(
incoming_grant,
scope="integration.probe",
request=incoming_body,
)
assert resolved.callee_app_key == "coommc"
account_id = resolved.subject.account_idAsyncAppGrantClient 提供同名异步方法。canonical_request_digest(payload) 可用于其他语言与 Python 对照请求摘要。