v0.1首个版本化设计基线查看版本范围
Developer

开始调用 Host API

本指南串起一个 v0.1 应用的最小完整路径:版本声明、方法授权、启动握手、调用、事件和清理。

1. 声明版本与最小能力

{
  "apiVersion": "0.1",
  "capabilities": [
    "host:env.snapshot",
    "host:store.get",
    "host:store.put"
  ]
}

逐方法声明,不用裸模块名或通配符。声明 store.get 不会自动获得 store.put

2. 启动前握手

const host = await appist.host({ apiVersion: '0.1' });

这是规范的逻辑 JS 绑定。宿主在 guest 执行前比对版本与方法集;不支持时以 version-mismatch 终止,不返回一个缺方法的半可用对象。

3. 调用与 HostError

try {
  const env = await host.env.snapshot();
  applyTheme(env.colorScheme);
} catch (error) {
  if (error.code === 'limit-exceeded' && error.retryable) {
    scheduleLater();
  } else {
    showFailure(error.code);
  }
}

只根据稳定 code 分支,不解析人类错误文本。用户关闭选择器或确认框通常返回 null,不应当成系统故障。

4. 事件

const off = host.events.on('env.change', async ({ changedFields }) => {
  const latest = await host.env.snapshot();
  updateChangedFields(latest, changedFields);
});

// 应用销毁时注销本地处理器。
off();

类型化事件传输在 guest 加载前已存在,不要为每个模块发明一套订阅 RPC。事件可以有界合并;方法返回值与重新读取的快照才是权威状态。

5. 取消与清理

const controller = new AbortController();
const request = host.net.fetch(spec, controller.signal);
controller.abort();

取消不得留下 guest 无法释放的句柄。会话类资源仍然应显式调用 stop/closeSession;宿主在 guest 崩溃或视图销毁时还要做最终回收。

6. 原生 WASM 绑定

逻辑 API 不出现 ptr/len。原生绑定将线性内存区域验证后映射为 ByteSource/ByteSink

uint8_t out[4096];
StoreGetResult result = host_store_get("settings", byte_sink(out, sizeof(out)));

宿主不得保留未约定的 guest 指针,也不得把输出截断后伪装成完整成功。

下一步

Host API 版本与分层概览Host API v0.1版本非正式提议提议canvas API呈现canvas.getInfo()方法canvas.draw()方法canvas.present()方法canvas.measureText()方法canvas.frame event事件canvas.resize event事件asset API呈现asset.read()方法asset.loadFont()方法playback API呈现playback.open()方法playback.write()方法playback.stop()方法playback.ready event事件playback.ended event事件input API输入input.focus()方法input.pointer event事件input.key event事件input.wheel event事件ime API输入ime.openSession()方法ime.updateState()方法ime.updateGeometry()方法ime.closeSession()方法ime.textUpdate event事件ime.composition event事件ime.formatUpdate event事件ime.characterBoundsRequest event事件capture API输入capture.requestCamera()方法capture.requestMic()方法capture.frame()方法capture.readAudio()方法capture.stop()方法capture.ended event事件store API数据store.get()方法store.put()方法store.delete()方法store.list()方法store.deletePrefix()方法clipboard API数据clipboard.readText()方法clipboard.writeText()方法clipboard.readImage()方法clipboard.writeImage()方法net API网络net.fetch()方法identity API身份identity.status()方法identity.login()方法identity.logout()方法env API平台集成env.snapshot()方法env.change event事件print API平台集成print.open()方法开始调用 Host API指南构建交互式绘图应用指南构建自绘文本编辑器指南管理媒体采集与播放指南组织本地数据与同步指南