You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于W3C WoT定义多表单交互的流程?

在W3C WoT中组合多步设备交互流程

核心实现方案

W3C WoT的Thing描述(TD)本身聚焦单个交互点(属性、动作、事件)的定义,但要实现先获取measurementIds再批量调用measurement的组合流程,可从以下几个方向落地:

1. 用TD语义扩展声明流程依赖

你可以在TD中添加自定义语义标注,明确两个属性的依赖关系,让客户端能识别出调用顺序:

{
    "@context": ["https://www.w3.org/2022/wot/td/v1.1", {
        "custom": "http://your-domain.com/terms/"
    }],
    // ...
    "properties": {
        "measurementsIds": {
            // ... 原有定义
            "custom:followedBy": "measurement"
        },
        "measurement": {
            // ... 原有定义
            "custom:dependsOn": "measurementsIds"
        }
    }
}

这种方式仅做流程声明,具体执行逻辑仍需客户端实现。

2. 客户端侧编排交互流程

这是最直接的实现方式,客户端按步骤执行即可:

  • 第一步:调用measurementsIds属性的表单接口,传入start和finish参数,拿到包含多个ID的列表。
  • 第二步:遍历ID列表,逐个调用measurement属性的表单接口,将每个ID作为id参数传入。

示例伪代码(JavaScript风格):

// 获取Thing实例
const thing = await WoT.fetch("http://thing.org/td");

// 第一步:获取measurementIds列表
const idsRes = await thing.readProperty("measurementsIds", {
    uriVariables: { start: "2024-01-01", finish: "2024-01-02" }
});
const idsList = await idsRes.value();

// 第二步:批量获取每个measurement数据
const measurementTasks = idsList.map(id => 
    thing.readProperty("measurement", { uriVariables: { id } }).then(res => res.value())
);
const allMeasurements = await Promise.all(measurementTasks);

3. 用WoT动作封装组合逻辑

如果设备端支持,可在TD中定义一个动作(Action),把整个组合逻辑封装在设备侧,客户端只需调用这个动作就能完成全部流程:

{
    "@context": "https://www.w3.org/2022/wot/td/v1.1",
    // ...
    "actions": {
        "getMeasurementsInRange": {
            "input": {
                "type": "object",
                "properties": {
                    "start": { "type": "date" },
                    "finish": { "type": "date" }
                }
            },
            "output": {
                "type": "array",
                "items": { "type": "object" } // 对应measurement的返回结构
            },
            "forms": [{
                "href": "http://thing.org/getMeasurementsInRange",
                "htv:methodName": "POST"
            }]
        }
    }
}

客户端调用该动作时,仅需传入start和finish,设备内部会自动完成measurementsIds查询、measurement批量获取,最终返回整合后的结果。


内容的提问来源于stack exchange,提问作者Eduard BABKIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:57:30