HTTP协议接入
HTTP简介
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。平台支持http及https两种接入方式。
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
协议特点
- 支持HTTP/HTTPS协议,仅支持上行报文和获取缓存的下发报文(最多10条)。
- HTTP为短连接会话,无法实现长连接建链。维持1小时内会话(token有效时间为1小时)。
- 报文类型:接入鉴权报文,上行数据报文,获取下发数据报文。
操作前提
1.已创建好产品和设备(细节参考产品管理、设备管理)
2.定义好产品模型(细节参考模型管理)
操作步骤
支持HTTP协议传输的设备按照下列支持的指令请求方式进行http访问即可。
下图是使用postman模拟http设备进行设备上线和主动拉取云端命令操作。
设备上线
主动拉取云端命令
指令详情
指令列表
指令功能 | 发送形式 | 详情 |
---|---|---|
设备上线 | D => C | /device/auth |
设备上报数据 | D => C | /device/topic |
设备主动拉取云端下发命令 | D => C | /device/topic |
设备上线
D => C
POST /device/auth HTTP/1.1
Content-Type:application/json
Accept:application/json
{
"pk":"f264aed445b745aea0ea8f2c4880b090",
"devId":"820842994100009",
"random":"8",
"hashMethod":"HmacMD5",
"sign":"f3bea7ab22f3a9291cb9494ca0951f86"
}
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
pk | 是 | string | 子设备节点 productKey。 |
devId | 是 | string | 子设备节点 devId。 |
random | 否 | string | 设备加密校验,随机字符串,可以使用当前时间毫秒数的字符串,也可以使用uuid生成的,也可以是 math.random()等等。 |
hashMethod | 否 | string | hash 方法,选填 HmacMD5 、HmacSHA1 、HmacSHA256 或者 HmacSHA512 。 |
sign | 否 | string | 要注册的设备的产品认证签名。 |
其中只有当设备需要登录安全校验时才需要填写random、hashMethod和sign。
sign的计算方式可以参考密码计算方式中对password的计算。
【注意】发起"设备上线"请求后,云端会对请求回复。即下述【云端回复设备上线】。
云端回复设备上线
C => D
HTTP/1.1 200 OK
{
"code": 0,
"desc": "success",
"data": {
"token": "68c75412cdc346178c5fb1fc0cd42237"
}
}
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
code | 是 | uint | 如果没有错误回复 0。 |
desc | 是 | string | 错误说明。 |
token | 是 | string | 设备token,后续所有操作都需要携带,如果token失效后需要再次登录获取(默认有效时间为1个小时)。 |
设备上报数据
D => C
POST /device/topic HTTP/1.1
Content-Type:application/json
Accept:application/json
token:{{token}}
{
"cmd": "up",
"params":{
"data":"updata1"
}
}
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
token | 是 | string | 登录时云端返回的token值。 |
cmd | 是 | string | 标识符。 |
params | 是 | object | 参数,如果只有指令,没有参数允许不填;否则应该填写该指令下的参数标识符。 可以少不能多,值做强较验(类型,长度等必须符合协议规定)。 |
【注意】发起"设备上报数据"请求后,云端会对请求回复。即下述【云端回复设备上报数据】。
云端回复设备上报数据
C => D
HTTP/1.1 200 OK
{
"code": 0,
"desc": "success"
}
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
code | 是 | uint | 如果没有错误回复 0。 |
desc | 是 | string | 错误说明。 |
设备主动拉取云端下发命令
D => C
GET /device/topic HTTP/1.1
Content-Type:application/json
Accept:application/json
token:{{token}}
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
token | 是 | string | 登录时云端返回的token值。 |
【注意】发起"设备主动拉取云端下发命令"请求后,云端会对请求回复。即下述【云端回复信息】。
云端回复信息
HTTP/1.1 200 OK
{
"code": 0,
"desc": "success",
"data": [
{
"cmd": "down",
"params": {
"data": "1"
}
},
{
"cmd": "down",
"params": {
"data": "1"
}
}
]
}
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
code | 是 | uint | 如果没有错误回复 0。 |
desc | 是 | string | 错误说明。 |
data | 否 | object | 云端下发命令。 |