1.概述和结构

REST API按功能分类,如电源控制、音量调整、输入切换等。功能名称包含在相应的端点URL中。已定义请求和响应的数据规格,可选择性地仅实现所需的控制。

可用的 API 服务

类型说明
向导(guide)guide 服务提供 API 来检索服务器上支持的服务列表。
应用程序控制(appControl)此服务处理用于启动应用程序本身的 API,以及与特定应用程序相关的操作。
音频(audio)此服务处理与音频功能相关的 API,例如音量、音效等。
av内容(avContent)此服务处理显示器 AV 内容的输入和输出的整体控制,以及显示器上 AV 内容本身的操作。
加密(encryption)此服务处理与加密相关的 API。
系统(system)此服务处理与基本显示器功能相关的 API。
视频屏幕(videoScreen)此服务处理与视频屏幕功能相关的 API。

示例 URL 结构

Base URL 由 IP 地址或主机名加上 /sony 组成。​

[IP address] or [Host name]/sony

各服务的API可通过以下URL结构进行访问。 ​

HTTP
http:// [IP address] or [Host name]/sony/[服务名]
  • 服务名末尾带有斜杠(/)的URL无效。
  • 各服务相互独立,API需要通过对应服务的URL调用。

示例  guide 服务(IP:192.168.0.1)

http://192.168.0.1/sony/guide

2.REST API版本规格和请求结构

REST API采用版本管理。包括API固有的版本以及REST API整体版本 (generation version)。通过这两个版本可判断显示器所支持的 API。

如何确认显示器支持的REST API版本

可在getSystemInformation响应中确认REST API版本。

示例  请求

JSON
{
"method": "getSystemInformation",
"id": 33,
"params": [],
"version": "1.0"
}

示例  响应

JSON
{
"result": [{
"product": "TV",
"region": "",
"language": "eng",
"model": "FW-85BZ35P",
"serial": "1000001",
"macAddr": "12:34:56:78:9A:BC",
"name": "BRAVIA",
"generation": "5.0.0",
"area": "ZZZ",
"cid": "01234567890123456789012345678901"
}],
"id": 33
}
  • “audio”:v1.0的API固有版本可用,v5.0.0的REST API整体版本 (generation version)可用。
  • “video”和”system”也采用相同的指定。

请参照 REST API 列表核对版本,确认支持的内容。

3.JSON-RPC规格、扩展和限制事项

REST API除了标准JSON格式外,还定义了自己的扩展格式。该API也有一定的限制。

JSON-RPC数据类型

类型说明
布尔值(boolean)存储布尔值。
布尔数组(boolean-array)在数组中存储多个 true 或 false 值。
整数(integer)存储 -2,147,483,648 到 2,147,483,647 范围内的整数。
整数数组(integer-array)在数组中存储多个整数。
双精度浮点数(double)存储 -2.2250738585072014e-308 到 1.7976931348623157e+308 范围内的浮点数。
双精度浮点数组(double-array)在数组中存储多个浮点数。
字符串(string)存储字符串。除非在各 API 规范中另有说明,否则采用 UTF-8 编码。
字符串数组(string-array)在数组中存储多个字符串。

扩展功能

  • 成功响应中忽略”error”,失败时省略”result”。
  • “error”是[error_code, error_message]格式的数组。
  • ·”error_code”为整数。
  • “error_message”为调试字符串(不可用于控制操作)。
  • 在请求中需指定”version”(例如”1.0″)以保持客户端兼容性。

限制事项

  • “null”原则上视为无效参数。
  • ・”params”和”result”为固定长度数组(符合API规格)。
  • “id”使用1到2147483647的整数(0是保留值,不可使用)。

示例 JSON-RPC

请求

{"method": "getMyName", "params": [{"key": 1116}], "id": 2, "version": "1.0"}

响应(成功)

{"result": [{"name": "Alice"}], "id": 2}

响应(失败)

{"error": [401, "Unauthorized"], "id": 2}

4.API规格中的内部描述规则

多重性1:必需一次
?:零次或一次
*:零次或多次
默认值默认值是在缺少特定参数的情况下,数据接收方必须将其视为从发送方发送的值。
日期本产品采用ISO 8601。
国家本产品使用iso3166 alpha 2及其他编码。

5.Pre-Shared Key级别访问控制

Pre-Shared Key(预共享密钥)认证有三个级别,采用分级管理。

private:最高认证级别。用于处理设备ID等个人可识别信息及用户特定信息的API,需要认证。
generic:用于进行设备控制或更改状态的API,需要认证。
none:无需认证的API。

客户端可访问与其认证级别相同或更低级别的API。例如,拥有private级别认证的客户端也可访问generic和none级别的API。但是,仅拥有generic级别认证的客户端无法访问private级别的API。

显示器根据各API定义的认证级别控制访问。

HTTP
POST /sony/system HTTP/1.1
 Host: 192.168.0.1 Accept: */* 
Cache-Control: no-cache 
Connection: close 
Content-Type: application/json; charset=UTF-8 
Pragma: no-cache 
X-Auth-PSK: 1234 
Content-Length: 70 {"method": "getPowerStatus", "params": [], "id": 50, "version": "1.0"}

6.加密系统

加密系统作为BRAVIA专业显示器的标准功能,通过encryption API提供。该系统通过标准2048/1024位RSA(RFC 3447)和128位AES-CBC算法(RFC 3602),对需要安全通信的字符串参数进行加密和解密。

注意
请注意,加密系统用于防止通信被窃听,但并不能阻止非法访问或冒充。此方法并不会对整个通信进行加密,而只对特定参数进行加密,因此其通信方式与JSON协议常规通信一致。

1. 接收流程

加密系统使用RSA公钥和AES对称密钥的混合方式。敏感数据通过AES对称密钥加密。RSA公钥用于在客户端和显示器之间安全共享对称密钥。

加密发送流程图
  • 准备
    显示器生成RSA密钥对,客户端生成AES密钥并使用RSA公钥进行加密。
  • 发送
    对敏感数据进行AES加密,然后与加密的AES密钥一起发送到显示器。
  • 接收
    显示器使用RSA私钥解密AES密钥,然后用解密后的AES密钥解密数据。
    使用RSA私钥解密共享密钥,然后使用该共享密钥解密数据。
处理流程图

2. 加密流程

从显示器将数据发送到客户端时也采用相同的加密机制。在预先准备密钥(生成RSA密钥对、创建AES密钥)后,将加密数据与加密密钥进行通信。即使通信被截取,第三者也无法解密。

机密数据接收流程
处理流程图

3.getPublicKey定义

getPublicKey方法是加密系统的通用API。发送或获取加密参数的API包含encKey元素和至少一个加密数据元素。如果API有多个加密元素,则必须在”params”中包含共享的encKey。

示例 JSON

JSON
{
    "method":"sendSecretData",
    "params":[
        {
            "secretData1":"G9KgQDustrxplKFcy9fnVQ==",
            "secretData2":"At2gQDgst6xplKFcy9fnVQ==",
            "encKey":"hCkxUu4WydqDwrlq+PsSSxBaIVbPFNeCU7XYgBC9bVmXvcTORXMdY5FeSr3LYu9WywFbh1WwTBW/S+xTPHZQXhQMUsWEFQwUSldm5xK8vhOcdzGe8kdrixAL6zL9qx6rioR95gF50FO1RRVS7jdsabPvHK5gXZHM9B2h24QKON1FeTkYVGKcf8J3JJp9gEWeNYG2bfMSvnS9qrn2bLXgAX71vwEz7Btm/+qmX7/nsrL5QGBdbgxUlK7q5JzZxOdDuh592lfdEoMIgFR144XAnhfqyCcuZLJ/60VjOpREQ17vTj6+NNVrSOIq4eHnBlB7SfFWM/CBa+rCFmYAzmm3VQ=="
        }
    ],
    "id":1,
    "version":"1.0"
}
{
    "result":[],
    "id":1
}

示例 JSON get

JSON
{
    "method":"getSecretData",
    "params":[
        {
            "encKey":"hCkxUu4WydqDwrlq+PsSSxBaIVbPFNeCU7XYgBC9bVmXvcTORXMdY5FeSr3LYu9WywFbh1WwTBW/S+xTPHZQXhQMUsWEFQwUSldm5xK8vhOcdzGe8kdrixAL6zL9qx6rioR95gF50FO1RRVS7jdsabPvHK5gXZHM9B2h24QKON1FeTkYVGKcf8J3JJp9gEWeNYG2bfMSvnS9qrn2bLXgAX71vwEz7Btm/+qmX7/nsrL5QGBdbgxUlK7q5JzZxOdDuh592lfdEoMIgFR144XAnhfqyCcuZLJ/60VjOpREQ17vTj6+NNVrSOIq4eHnBlB7SfFWM/CBa+rCFmYAzmm3VQ=="
        }
    ],
    "id":1,
    "version":"1.0"
}
{
    "result":[
        {
           "secretData":"G9KgQDustrxplKFcy9fnVQ=="
        }
    ],
    "id":1
}

4.实现指南

显示器开机时会生成RSA公钥/私钥对。RSA密钥生成耗时较长。请根据显示器规格设置位大小和管理方法。

客户端初始化步骤
  1. 调用getPublicKey获取显示器的公钥。
  2. 生成AES对称密钥并使用RSA公钥加密以创建encKey。
  3. 3.使用这些密钥调用加密API。

注意
初始化后请勿更改密钥,以保持一致性。

加密密钥的大小可以在各系统中定义。请使用考虑到安全性的密钥大小。客户端可以在不同的 API 调用中使用相同的共享密钥。此外,如有必要,客户端可以重新创建共享密钥和 encKey,以提高安全性。

错误处理

如果由于密钥不匹配等无效状态导致加密模块的加密或解密失败,显示器将返回 40002 Encryption Failed 错误。如果客户端收到此错误,请重新执行初始化步骤(从调用 getPublicKey 开始)。

7.设备资源URI

在REST API中,标准URI结构,如定义RFC 3986, 用于表示设备的资源。 方案用于引用设备资源。 URI基本上是由设备/服务器提供的,客户端不应该更改/修改URI。

定义方案

基本架构

架构类型说明
extInput输入资源(input resource)外部输入资源

定义的来源

架构来源说明
extInputextInput:cecCEC 输入资源
extInputextInput:component分量外部输入资源
extInputextInput:composite复合外部输入资源
extInputextInput:hdmiHDMI 外部输入资源
extInputextInput:widiWi-Fi 显示资源

举例说明

输入类型URI 示例说明
HDMI extInput:hdmi?port=1HDMI 1
HDMIextInput:hdmi?port=2HDMI 2
HDMIextInput:hdmi?port=3HDMI 3
HDMIextInput:hdmi?port=4HDMI 4
分量extInput:component?port=1分量 1
分量extInput:component?port=2分量 2
分量extInput:component?port=3分量 3
分量extInput:component?port=4分量 4
Wi-Fi 显示输入extInput:widi?port=1Wi-Fi 显示
CEC 录像机extInput:cec?type=recorder&port=1录像机 1
CEC 录像机extInput:cec?type=recorder&port=2录像机 2
CEC 录像机extInput:cec?type=recorder&port=3录像机 3
CEC 播放器extInput:cec?type=player&port=1播放器 1
CEC 播放器extInput:cec?type=player&port=2播放器 2
CEC 播放器extInput:cec?type=player&port=3播放器 3
CEC 调谐器extInput:cec?type=tuner&port=1调谐器 1
CEC 调谐器extInput:cec?type=tuner&port=2调谐器 2
CEC 调谐器extInput:cec?type=tuner&port=3调谐器 3
其他 CEC 设备extInput:cec?type=freeuse通用 CEC 设备