W3C万维物联网解析:编程API篇

本文深入解析W3C Web of Things(WoT)的编程API,涵盖消费物、暴露物和发现物的场景,详细讲解ThingDescription类型、WOT接口、ConsumedThing和ExposedThing接口,以及ThingDiscovery接口及其方法,帮助开发者理解如何通过脚本与WoT物体交互和发现物联网设备。
摘要由CSDN通过智能技术生成

编者按:本文作者李松峰,资深技术图书译者,翻译出版过40余部技术及交互设计专著,现任360奇舞团Web前端开发资深专家,360前端技术委员会委员、W3C AC代表。

2019年10月21日,作者在“W3C万维物联网标准简介”一文中简单介绍了W3C Web of Things(WoT)工作组制定的WoT标准以及它们的最新状态:

规范 当前状态
WoT Architecture CR
WoT Thing Description CR
WoT Scripting API WD,Working Draft
WoT Binding Templates Working Group Note
WoT Security and Privacy Considerations Working Group Note

本系列将从WoT标准本身出发,对目前已经进入CR阶段(W3C标准的阶段参见下图)的WoT Architecture(WoT架构)、WoT Thing Description(WoT物描述)以及处于WD阶段的WoT Scripting API(WoT编程API)进行一次快速解析。

如下图所示,标准进入CR阶段意味着内容已经相对稳定,WD阶段则意味着较大的不确定性,而Working Group Note(工作组备忘)则变数很大。因此处于CR阶段的“架构”和“物描述”是值得花时间了解的(成为正式推荐标准REC的可能性很大),而处于WD阶段的编程API在2019年10月28日做了一次大的内容改版,几乎完全废弃了上一版的内容,只能说接近稳定状态,但编程API始终是开发者所喜闻乐见的,所以本系列也会介绍。

W3C Process Document,https://www.w3.org/2019/Process-20190301/#recs-and-notes

1. 编程API简介

WoT Scripting API描述如何通过脚本暴露和消费物体,同时定义了通用的物发现API。基于WoT架构定义的“消费体”(consumed thing)和“暴露体”(consumed thing),这个规范提供了不同层次的交互操作能力。

首先,客户端通过消费TD(Thing Description)可以创建一个本地运行时资源模型,即消费体。消费体支持访问远程设备上的服务端物体暴露的属性、动作和事件。

其次,服务端负责暴露物体,为此需要:

  • 定义TD

  • 初始化一个实现该TD所定义WoT接口的软件栈,以服务于对暴露属性、动作和事件的请求

  • 最终发布TD(比如发布到一个物体目录,以便消费者发现)

2. 支持的场景

编程API支持以下脚本使用场景。

2.1 消费物

  • 消费物体的TD,如基于暴露WoT交互的TD创建一个编程对象:

    • 读取一或多个属性的值

    • 设置一或多个属性的值

    • 观察属性值的变化

    • 调用动作

    • 观察物体发出的事件

    • 推断(内省)TD,包括基于TD链接的资源

2.2 暴露物

  • 暴露物体包括生成协议绑定以便访问底层功能

  • 基于提供的字符串序列化格式的TD或既有物体对象创建本地要暴露的物体

  • 给物体添加属性定义

  • 从物体删除属性定义

  • 给物体添加动作定义

  • 从物体删除动作定义

  • 给物体添加事件定义

  • 从物体删除事件定义

  • 发送事件,如通知订阅了该事件的所有监听程序

  • 为外部请求注册处理程序

    • 取得属性的值

    • 更新属性的值

    • 执行动作:接收来自请求的参数,执行定义的动作,返回结果

2.3 发现物

  • 通过发送广播请求在WoT网络中发现所有物体

  • 发现在本地WoT运行时中运行的物体

  • 发现邻近的物体,如通过NFC或蓝牙连接的物体

  • 通过向一个注册表服务发送发现请求发现物体

  • 通过物体描述定义的过滤器发现物体

  • 通过语义查询发现物体

  • 停止或阻止进行中的发现过程

  • 可选地给发现过程指定超时时间,超时后停止/阻止继续发现

3. 接口及类型定义

3.1 ThingDescription类型

typedef object ThingDescription;

下面是通过URL获取一个ThingDescription类型实例的示例:

例1:获取TD

try {
  let res = await fetch('https://tds.mythings.biz/sensor11');
  // ... 可以对res.headers进行额外检查
  let td = await res.json();
  let thing = new ConsumedThing(td);
  console.log("Thing name: " + thing.getThingDescription().title);
} catch (err) {
  console.log("Fetching TD failed", err.message);
}

此外,规范也定义了如何扩展TD和验证TD。

3.2 WOT接口

[SecureContext, Exposed=(Window,Worker)]
interface WOT {
  // methods defined in UA conformance classes
  Promise<ConsumedThing> consume(ThingDescription td);
  Promise<Exp
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值