接口约定
概述
本篇介绍了 USB Fusion API 的请求数据和返回数据的构成元素,通过这些元素你可以了解如何发起请求,如何解读返回数据。
- 请求协议:HTTP 
- 请求方法:默认情况下,数据请求、提交及文件上传都用 POST 方式,个别 API 同时支持 GET 方式,如:重置设备鉴权,具体由各功能接口决定。 
- 请求域名: 设备网卡 IP(IPv4) 地址,如: - http://192.168.66.1
- 请求头(Request Headers):以请求头(HTTP Header)提供有关请求的的额外信息,以下是 USB Fusion API 的请求中使用的实例 - Content-Type:内容类型,用于定义网络文件的类型和网页的编码。- USB Fusion API 中主要包括以下两类语法格式: - Content-Type: application/json; charset=utf-8,用于数据请求或提交,使用 UTF-8 编码并以 JSON 格式封装。
- Content-Type: multipart/form-data; boundary=${boundary},用于文件上传,支持图片、视频、音乐等媒体文件及 USB Fusion 固件。
 
- Cookie:储存在用户本地终端上的数据,在 USB Fusion API 中被用于辨别用户身份,如- Cookie: sid-A506220808450=6062n8wqjz9mm7m7op91a05j58bup424
 
- 请求参数(Request Body):允许以消息体(HTTP Body)的形式将附加数据传递给 USB Fusion API。这些参数可以是必要的,也可以是可选的,具体由各功能接口决定。 
- 返回数据(Response Body):以消息体(HTTP Body)的形式返回数据。HTTP 状态为 200 时,返回 JSON 格式的数据,否则为 HTTP 对应错误码。 
- 登录认证方式:在 - Cookie中携带- sid-xx=xxxxxxxxx。个别 API 无需认证,如:Ping测试。
- [xxx]: 某类数据的替代标识。 - [IP],设备网卡IP地址,使用时需替换实际内容,如:192.168.66.1
- [port],端口号,使用时需替换为实际内容,如:8080。
- [serial number],设备序列表号,使用时需替换为实际内容,如:A506220808450。
 
提交请求
数据请求及提交
数据请求及提交时,要求附加数据使用 UTF-8 编码并以 JSON 格式封装,如:
示例 1:添加用户(需要登录认证)
Request Headers
    POST / HTTP/1.1
    Host: 192.168.66.1/api/user/add
    Content-Type: application/json; charset=utf-8
    Cookie: sid-A506220808450=6062n8wqjz9mm7m7op91a05j58bup424
Request Body
    {
        "username":"test",
        "password":"c4ca4238a0b923820dcc509a6f75849b"
    }
示例2:测试设备网络连接(无需登录认证)
Request Headers
    POST / HTTP/1.1
    Host: 192.168.66.1/api/ping
    Content-Type: application/json; charset=utf-8
Request Body
None
文件上传
文件上传时,要求附件数据以二进制形式封装,如:
Request Headers
    POST / HTTP/1.1
    Host: 192.168.66.1/mwapi/upload-source-file
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryuCSyGCncblrUp3ed
    Cookie: sid-A506220808450=6062n8wqjz9mm7m7op91a05j58bup424
Request Body
    ------WebKitFormBoundaryuCSyGCncblrUp3ed
    Content-Disposition: form-data; name="file"; filename="204.jpeg"
    Content-Type: application/octet-stream
    XXXX
    XXXX
    ------WebKitFormBoundaryuCSyGCncblrUp3ed--
返回数据
返回数据均为 JSON 数据格式。
JSON 对象中的 status/result 属性为 公共错误码,为 0 时表示数据获取或操作成功,否则为相应的失败错误码。
示例1:单层的数据封装
    {
      "status": 0,
      "enable": true,
      "enable-web-control": true
    }
示例2:带有二级对象的数据封装
    {
      "result": 0,
      "info": {}
    }
示例3:二级对象为数组的数据封装
    {
      "status": 0,
      "items": []
    }
示例4:出现业务错误的数据封装
    {
      "status": 16,
      "message": "Item is not exist."
    }
登录认证及 API 访问身份验证
为保障系统安全,USB Fusion API 大多数需要进行身份验证,部分 API 要求管理员才可访问,如:添加用户、删除用户等。
登录认证
使用用户名username和密码password登录。
登录成功后会在 Cookie 存放 Session ID:
Cookie: sid-[serial number]=6440wa6u5wfw8wv43f91v55cqkctnpv6。
Session ID 持续有效,直到设备关机或重启。
Request Headers
    POST / HTTP/1.1
    Host: 192.168.66.1//api/user/login
    Content-Type: application/json; charset=utf-8
Request Body
    {
        "username":"test",
        "password":"c4ca4238a0b923820dcc509a6f75849b"
    }
Response Headers
    Content-Type: application/json; charset=utf-8
    Expires: 0
    Set-Cookie: sid-A506220808450=6062n8wqjz9mm7m7op91a05j58bup424
Response Body
{
    "status":"test",
    "sid":"6440wa6u5wfw8wv43f91v55cqkctnpv6"
}
API 访问身份验证
需要身份验证的 API 访问时,需要在 Cookie 中传输登录认证接口获取的 Session ID
Request Headers
    POST / HTTP/1.1
    Host: 192.168.66.1//api/user/add
    Content-Type: application/json; charset=utf-8
    Cookie: sid-A506220808450=6062n8wqjz9mm7m7op91a05j58bup424