IoT开发实战:CoAP卷【2.0】

5.8 CoAP媒体类型

CoAP支持多种媒体类型,但CoAP支持的媒体类型数量远小于HTTP支持的媒体类型,可以说CoAP的媒体类型是HTTP的媒体类型的微小子集,不过在物联网领域这些媒体类型已经完全足够。CoAP媒体类型采用编号的方式定义,该编号一般采用2字节无符号整数定义。CoAP媒体类型的定义如表5-4所示。

表5-4 CoAP媒体类型

在物联网实际应用中,文本类型text/plain、二进制类型application/octet-stream、JSON类型application/json应用最为广泛,二进制JSON类型application/cbor也逐渐投入使用。application/link-format是一种专属于CoAP的媒体类型,该媒体类型一般在CoAP资源发现中使用。

5.8.1 link-format类型

link-format是CoAP中引入的新类型,该类型配合CoAP资源发现使用。CoAP服务器中一般包括一个事先约定的路由(/.well-known/core)。CoAP服务器内一般包括较多资源,这些资源由不同的URI定义。若CoAP客户端通过GET方法访问.well-known/core路由,CoAP服务器将相关资源的URI通过link-format格式返回至CoAP客户端,例如:

<sensors/temp>;sz=64;title=Temperature Sensor;ct=50,

<actuators/relay>;sz=32;title=Lamp Relay;ct=50

关于link-format类型的更多内容请参考6.2节。

5.8.2 文本与二进制类型

文本类型和二进制类型是较为简单的媒体类型。CoAP中的默认媒体类型为文本类型。若负载为文本类型,无论在CoAP请求或CoAP响应中均不需要指定Content-Format。虽然文本类型使用非常简单,但是也存在一定的局限性。例如使用文本类型表示三个传感器检测结果,可能采用这样的方式定义负载内容:

12.3,80.5,1890

传输双方需要提前定义三种传感器检测结果的排列顺序,如温度传感器结果在前,湿度传感器在后,光照传感器位于最后。在上面的示例中,温度检测结果为12.3,湿度检测结果为80.5,光照检测结果为1890。虽然文本类型比较实用,但没有JSON或CBOR类型灵活。

在某些物联网应用中,TLV形式的二进制负载也广受欢迎,TLV中的T表示类型,L代表长度,而V表示具体内容,表面来看TLV形式的二进制类型非常节约空间,但是也带来一定的浪费或麻烦。

·T的定义可能与CoAP中的方法重复,例如T=0x01表示数据上传,T=0x02表示数据更新,那么此时T的定义便和CoAP中的POST方法和DELETE方法重复。

·V的设计也存在很多“误区”,如整数传输的大小端问题、浮点数长度问题和大小端问题、负数保存的问题等。

5.8.3 JSON类型

JSON(JavaScript Object Notation)[1]是一种轻量级的数据交换格式。JSON格式易于人类阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于计算机语言的文本格式,但也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换手段。JSON有两种构成结构——JSON对象和JSON数组。

1.JSON对象

JSON对象是一个无序的键值对集合。一个JSON对象以“{”开始并以“}”结束。每个“键”后跟一个“:”(分号),每组键值对之间使用“,”(逗号)分隔。如图5-21所示为JSON对象的基本构造方法。

图5-21 JSON对象(图片来自json.org)

2.JSON数组

JSON数组是值的有序集合。一个数组以“[”开始并以“]”结束。值之间使用“,”&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值