组织本地数据与同步
v0.1 鼓励 local-first:store 是应用在当前设备上的权威本地状态。平台身份和外部网络尚未进入正式版本,因此同步协议必须与本地数据模型解耦。
{
"apiVersion": "0.1",
"capabilities": [
"host:store.get",
"host:store.put"
],
"events": [],
"apiLimits": {}
}
1. 先读本地状态
const entry = await host.store.get('documents/current');
const document = entry ? decodeDocument(entry.value) : createDocument();
render(document);
应用不应等网络或登录才显示本地内容。
2. 使用版本避免覆盖
async function save(document, previous) {
try {
return await host.store.put(
'documents/current',
encodeDocument(document),
previous ? { version: previous.version } : 'absent',
);
} catch (error) {
if (error.code !== 'conflict') throw error;
return resolveConflict(document, await host.store.get('documents/current'));
}
}
3. 为未来同步保留明确边界
把待同步操作追加成 guest 自己定义的日志,并和已物化的本地文档一起存入 store。未来若受控网络能力进入正式版本,应用只需要上传和确认这份日志,不需要更换宿主存储模型。不要把尚未存在的身份或网络接口写进 v0.1 manifest。
4. 哪些东西留在 guest
数据库页、索引、查询、CRDT、同步日志、冲突解决与端到端加密协议都是 L2/L3。正式 v0.1 只提供当前设备上的应用作用域持久化资源。