智能家居后端技术解决方案-API设计

2024-07-12 1083阅读

一、采用HTTP和MQTT协议进行数据交互和通信

智能家居后端技术解决方案-API设计
(图片来源网络,侵删)

API 请求签名

对于每一次发送给后端服务器的HTTP和MQTT协议请求,我们会根据访问中的签名信息验证访问请求者身份。具体由使用authToken_和authSecret_对称加密验证实现。其中authToken_是访问者身份,authSecret_是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。 

签名

签名采用HmacSHA1算法 + Base64,编码采用UTF-8。签名之前需要将body内容与上一步中得出的待签名字符串拼接在一起, 如果没有body则不用拼接. 

公共请求参数

API 接口中使用了公共参数, 携带在URI的query中. HTTP是url, MQTT是payload header uri

嵌入式请求参数

名称类型是否必填说明
firmwareVer_string固件版本号
softwareVer_string软件版本号
deviceModel_string设备产品型号
ts_int64当前Unix时间戳

App 请求参数

名称类型是否必填说明
platform_string系统平台, 可选: android, ios
deviceVer_string系统版本号
deviceModel_string手机厂商, 如: apple, vivo, xiaomi, oppo等
appVer_stringApp 版本号, versionName
appChannel_stringApp 下载安装渠道, 如: appstore, xiaomi
net_string网络类型, 如: wifi, 3g, 4g, 5g
ts_int64当前Unix时间戳
authType_string登录成功, 都必须携带该参数. 固定值:xxx
authToken_string登录成功后返回的身份令牌, 之后的请求都必须携带该参数.
sign_string登录成功, 获得auth_secret_后, 之后的请求都必须携带该参数

小程序请求参数

名称类型是否必填说明
platform_string系统平台, 可选: wechat
ts_int64当前Unix时间戳
authType_string登录成功, 都必须携带该参数. 固定值: wx_lite
authToken_string登录成功后返回的身份令牌, 之后的请求都必须携带该参数.
sign_string登录成功, 获得auth_secret_后, 之后的请求都必须携带该参数

管理后台请求参数

名称类型是否必填说明
platform_string系统平台, 可选: pc, pad
ts_int64当前Unix时间戳
authType_string登录成功, 都必须携带该参数. 固定值: admin
authToken_string登录成功后返回的身份令牌, 之后的请求都必须携带该参数.
sign_string登录成功, 获得auth_secret_后, 之后的请求都必须携带该参数

协议概述

通讯数据协议是应用协议(mqtt,bluetooth,跨平台调用等)之上的业务通讯数据规范, 一套规范适用于各平台的数据调用交互. 数据格式为byte array, 协议分为 header 和 payload. 其中, header 表达数据交互动作等基础信息, payload与业务关联性更近, 包含 payload header 和payload body. 数据字节位如下:

version 1:

headerpayload
字节位
Bit 1
Bit 2Bit 3 ~ Bit 6
payload headerpayload body
说明
versionactionpayload header length
bytesbytes

version 2:

| | header | data | | | :---: | :---: | :---: | --- | | 字节位 | Bit 1 | Bit 2~ | | | 说明 | version | data | |

data
headerpayload
字节位Bit 1Bit 2 ~ Bit 5payload headerpayload body
说明actionpayload header lengthbytesbytes

字节位字段说明:

  1. version: 从1开始递增. version 2 开始引入数据包协议层加密,data为加密数据,加密逻辑由version决定

version2 加密方式:AES-256-CBC+PKCS7UnPadding,key从服务器获取

  1. action: 表示应用场景类型. 数字类型从1递增, 可选值如下:
    1. 1: 表示push, 用于推送和数据上报场景, 不需要响应
    2. 2: 表示call, 用于查询和操作资源, 需要对方响应结果
    3. 3: 表示reply, 用于响应结果, 如果content-length=0表示接收到消息, 但不需要返回结果
  2. payload header: 可扩展的payload协议头, key-value 对, 每对之间使用\n分割.  key和value之间使用英文冒号分割. 如:

content-type:json\ncontent-lenght:12

payload body: 协议无关的业务数据

payload 基础字段说明

payload header

以下是通用的字段, 可根据实际业务需要再进行扩展

字段名HTTP Header Keytypeactionoption说明
uristringall必需标准资源路径, 可支持 query 参数
identifierx-indentiferstringall必需该次请求的id标识, 用于关联响应
lengthlengthint32all必需body 数据长度; 默认0
statusstatusintreply必需响应状态码
infox-infostringreply必需响应状态信息, 可用于调试错误信息显示
encryptedx-encryptedstringall可选标识body数据包加密方式; 可选[aes]
accept-encryptedx-accept-encryptedstringcall可选标识接收的body数据包加密方式; 可选[aes], 不填写则根据encrypted决定

payload body

call和push类型的body没有公共字段, 直接发送业务数据. reply 类型需要遵从以下字段格式(以json为例):

{ "data": {} // 业务数据 "error": { // 业务错误信息, 当status=299时才有 "code": 0, // 业务错误码 "message": "" // 错误信息文案, 展示给用户 } }

status 可选值如下:

  • 200: ok
  • 299: 业务错误
  • 400: 参数错误
  • 401: 未授权的请求
  • 404: 无效的uri
  • 500: 对方服务内部错误
  • 502: 网关错误
  • 504: 超时
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]