什么是 REST API?
REST(Representational State Transfer,表现层状态转移)是一种广泛应用于互联网 Web 服务的软件架构风格。
而 REST API 就是基于这种风格设计的应用程序接口。它将系统中的所有事物(如诊断数据、故障码、ECU组件)都视为**“资源”(Resources)**,并为每个资源分配一个唯一的 URL(统一资源定位符)。
🔑 REST API 的核心特征
-
使用标准的 HTTP 方法:对资源的操作直接映射到 HTTP 的基础动词上。
-
无状态性 (Stateless):每个请求都包含服务器理解并处理该请求所需的全部信息,服务器不保存客户端的上下文。
-
数据格式通用:通常使用 JSON(JavaScript Object Notation)格式来传输数据,这种格式可读性极强,易于解析。
🔌 SOVD 中是如何使用 REST API 进行通信的?
在传统的汽车诊断中,如果想读取一个 DID,你需要发送一串十六进制报文(例如 UDS 的 22 EE 48)。而在 SOVD 的 REST API 架构中,一切都变成了发送一个 Web 请求。
1. 资源定位 (URL)
SOVD 将车载诊断资源抽象为 URL 路径。例如:
-
获取所有组件列表:
http://<ECU_IP>:<Port>/sovd/v1/components -
读取 DID
0xEE48的数据:http://<ECU_IP>:<Port>/sovd/v1/data/0xEE48 -
获取故障码 (DTC) 列表:
http://<ECU_IP>:<Port>/sovd/v1/faults
2. HTTP 动词与诊断操作的映射 🔄
REST API 的核心在于用不同的“动作”对同一个 URL 进行操作:
| HTTP 方法 (Method) | 诊断对应操作 | 实际应用示例 (以 VSPS_SOVD_DEMO 为例) |
|---|---|---|
| GET | 读取 资源信息 | GET /sovd/v1/data/0xEE49 👉 读取该可读写 DID 的当前值。 |
| PUT / POST | 写入/更新 资源 | PUT /sovd/v1/data/0xEE49 (携带数据 { "value": 5 }) 👉 写入新值 5 到该 DID。 |
| DELETE | 删除/清除 资源 | DELETE /sovd/v1/faults 👉 清除 ECU 中的所有故障码(等同于 UDS ClearDTC)。 |
3. 数据载体 (JSON Payload) 📦
无论是请求还是响应,数据都打包在 JSON 格式中。
-
例如,写入数据时的请求体 (Request Body):
JSON
{ "value": "05" } -
读取故障码时的返回体 (Response Body):
JSON
{ "faults": [ { "code": "0x4D2", "status": "active", "description": "DTC 0x4D2 test failed" } ] }
🛠️ Bruno 与 SOVD 服务器的通信流程
Bruno 在这里充当了一个 API 客户端(Web Client) 的角色(类似于 Postman)。
-
建立连接:Bruno 运行在开发电脑上,通过以太网(通常是 TCP/IP)连接到目标 ECU(例如运行在 QEMU 虚拟机中的 Linux,IP 为配置中的
192.168.x.x,端口通常是 SOVD 服务监听的端口,如8080或80)。 -
发送请求:当你在 Bruno 中点击 "Send" 按钮(例如
Read DID 0xEE48),Bruno 会构建一个标准的 HTTP 请求:http
GET /sovd/v1/data/0xEE48 HTTP/1.1 Host: 192.168.40.20:8080 Accept: application/json -
服务器处理:部署在目标 ECU 上的 SOVD 服务器(包含在 VSPS 运行时中)收到这个 HTTP 请求,解析 URL,调用底层的自适应 AUTOSAR 诊断模块(如
ara::com或ara::diag)获取 CPU 负载。 -
返回响应:SOVD 服务器将结果包装成 HTTP 响应并发送回 Bruno:
http
HTTP/1.1 200 OK Content-Type: application/json { "value": "35" }(35 代表当前的 CPU 负载值)
🛡️ 通信协议栈 (Protocol Stack)
整个通信过程是基于标准的互联网协议栈构建的,自底向上为:
物理介质 (车载以太网 / 电脑网线)→IP 协议 (IPv4/IPv6)→TCP 协议→HTTP 协议 (通常是 HTTP/1.1 或 HTTP/2)→SOVD 报文 (JSON)
-
传输层协议:TCP(确保诊断数据传输的可靠性,不丢包)。
-
应用层协议:HTTP(或加密的 HTTPS 用于安全诊断)。
⚠️ 安全防范 (Watch out for):由于基于标准的 HTTP/IP 协议,SOVD 诊断接口极易暴露在网络中。在量产车中,必须通过 TLS/HTTPS 进行通道加密,并配合 OAuth 2.0 等身份认证机制,以防黑客通过网络接口非法控制车辆诊断系统。

1292

被折叠的 条评论
为什么被折叠?



