跳转至

系统状态API

本文档引用的文件 - rest_api.c - rest_api.h - config.h - network_manager.h - ble_gateway.h - config_manager.c

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

系统状态API是ESP32-S3蓝牙网关系统的核心RESTful API端点,提供实时的系统运行状态信息。该API通过/api/status端点的GET方法,向客户端返回设备的完整运行状态,包括固件版本、设备标识、运行时间、内存使用情况、网络连接状态、BLE扫描状态等关键信息。

本API设计用于监控和诊断目的,为系统管理员和开发者提供实时的设备健康状况和运行指标。响应数据采用JSON格式,便于各种编程语言和工具的解析和处理。

项目结构

系统状态API位于ESP32-S3蓝牙网关项目的REST API模块中,采用模块化设计,与其他系统组件保持松耦合的关系。

graph TB
subgraph "REST API模块"
REST[rest_api.c]
RESTH[rest_api.h]
end
subgraph "配置管理"
CFG[config.h]
CM[config_manager.c]
end
subgraph "网络管理"
NM[network_manager.h]
end
subgraph "BLE网关"
BG[ble_gateway.h]
end
subgraph "外部依赖"
CJSON[cJSON库]
HTTPD[ESP-IDF HTTP服务器]
end
REST --> CFG
REST --> CM
REST --> NM
REST --> BG
REST --> CJSON
REST --> HTTPD

图表来源 - rest_api.c - rest_api.h - config.h

章节来源 - rest_api.c - rest_api.h

核心组件

系统状态API由以下核心组件构成:

主要功能模块

  • REST API处理器: 处理HTTP请求和生成JSON响应
  • 配置管理器: 提供设备配置信息
  • 网络管理器: 获取网络连接状态
  • BLE网关: 汇总BLE设备扫描状态
  • JSON序列化: 使用cJSON库生成标准JSON格式

数据源接口

  • 配置管理器接口:config_manager_get()
  • 网络管理器接口:network_manager_get_status()
  • BLE网关接口:ble_gateway_get_device_count()

章节来源 - rest_api.c - config_manager.c

架构概览

系统状态API采用分层架构设计,确保各组件职责明确且相互独立。

sequenceDiagram
participant Client as 客户端
participant HTTPD as HTTP服务器
participant API as REST API处理器
participant Config as 配置管理器
participant Net as 网络管理器
participant BLE as BLE网关
Client->>HTTPD : GET /api/status
HTTPD->>API : 调用api_status_handler()
API->>Config : 获取配置信息
API->>Net : 获取网络状态
API->>BLE : 获取BLE设备数量
API->>API : 组装JSON响应
API-->>HTTPD : 返回JSON数据
HTTPD-->>Client : HTTP 200 + JSON
Note over Client,HTTPD : 成功响应流程

图表来源 - rest_api.c

章节来源 - rest_api.c

详细组件分析

API端点定义

系统状态API端点在REST API模块中注册,使用标准的HTTP GET方法。

属性
方法 GET
路径 /api/status
内容类型 application/json
认证 无需认证

响应数据结构

系统状态API返回的JSON对象包含以下顶级字段:

基础信息字段

字段名 数据类型 描述 示例值
gateway_id 字符串 网关设备唯一标识符 "ESP32S3-BLE-Gateway-001"
firmware 字符串 固件版本号 "1.0.0"
uptime 数字 系统运行时间(秒) 12345
heap_free 数字 可用堆内存大小(字节) 81920

网络状态字段

字段名 数据类型 描述 示例值
network.connected 布尔值 网络连接状态 true
network.ip 字符串 当前IP地址 "192.168.1.100"
network.interface 字符串 活跃网络接口 "ETH""WIFI"

BLE状态字段

字段名 数据类型 描述 示例值
ble.devices 数字 发现的BLE设备数量 15

请求处理流程

flowchart TD
Start([接收HTTP请求]) --> CreateObj[创建JSON根对象]
CreateObj --> AddBaseInfo[添加基础信息]
AddBaseInfo --> GetNetStatus[获取网络状态]
GetNetStatus --> AddNetStatus[添加网络状态]
AddNetStatus --> GetBLECount[获取BLE设备数量]
GetBLECount --> AddBLEStatus[添加BLE状态]
AddBLEStatus --> SerializeJSON[序列化为JSON字符串]
SerializeJSON --> SetHeaders[设置HTTP响应头]
SetHeaders --> SendResponse[发送HTTP响应]
SendResponse --> Cleanup[清理内存]
Cleanup --> End([请求处理完成])
AddBaseInfo --> AddGatewayID[添加gateway_id]
AddBaseInfo --> AddFirmware[添加firmware]
AddBaseInfo --> AddUptime[添加uptime]
AddBaseInfo --> AddHeap[添加heap_free]

图表来源 - rest_api.c

章节来源 - rest_api.c

错误处理机制

系统状态API采用统一的错误处理策略:

错误场景 HTTP状态码 错误描述 处理方式
正常请求 200 请求成功处理 返回JSON状态数据
内存不足 500 内存分配失败 返回标准错误响应
网络异常 503 服务不可用 返回服务暂时不可用

性能特性

系统状态API具有以下性能特征:

  • 响应时间: 通常小于50毫秒
  • 内存使用: 动态分配,峰值约2KB
  • CPU开销: 低,主要为JSON序列化操作
  • 并发支持: 支持多客户端并发访问

章节来源 - rest_api.c

依赖关系分析

系统状态API与多个内部模块存在依赖关系,形成清晰的依赖层次结构。

graph TB
subgraph "API层"
API[REST API处理器]
end
subgraph "服务层"
Config[配置管理服务]
Network[网络管理服务]
BLE[BLE网关服务]
end
subgraph "基础设施层"
NVS[NVS存储]
HTTPServer[HTTP服务器]
cJSON[cJSON库]
end
API --> Config
API --> Network
API --> BLE
Config --> NVS
Network --> HTTPServer
BLE --> HTTPServer
API --> cJSON
Network --> cJSON
BLE --> cJSON

图表来源 - rest_api.c

章节来源 - rest_api.c

关键依赖接口

依赖模块 接口函数 用途
配置管理器 config_manager_get() 获取设备配置信息
网络管理器 network_manager_get_status() 获取网络连接状态
网络管理器 network_manager_is_connected() 检查网络连接状态
BLE网关 ble_gateway_get_device_count() 获取BLE设备数量

章节来源 - rest_api.c

性能考虑

系统状态API在设计时充分考虑了性能优化:

内存管理

  • 使用栈分配的临时缓冲区避免动态内存碎片
  • JSON对象在使用后及时释放,防止内存泄漏
  • 字符串处理使用固定大小缓冲区

响应优化

  • 采用紧凑的JSON格式减少传输数据量
  • 避免不必要的数据复制操作
  • 使用高效的字符串拼接方法

并发处理

  • API处理器支持多任务并发调用
  • 各子系统的状态查询采用非阻塞方式
  • 避免长时间持有互斥锁

故障排除指南

常见问题及解决方案

1. API响应为空或格式错误

症状: HTTP 200但响应体为空 原因: JSON序列化失败或内存分配不足 解决: 检查系统可用内存,确认cJSON库正常工作

2. 网络状态显示异常

症状: network.connected始终为false 原因: 网络管理器初始化失败或网络接口未就绪 解决: 检查网络配置,确认以太网或WiFi模块正常工作

3. BLE状态不准确

症状: ble.devices计数异常 原因: BLE网关未正确初始化或扫描状态异常 解决: 重启BLE扫描服务,检查HCI传输层

4. 内存不足错误

症状: HTTP 500错误,日志显示内存不足 原因: 系统可用堆内存过低 解决: 优化其他组件内存使用,增加可用内存

调试建议

  1. 启用详细日志: 在开发环境中启用DEBUG级别日志
  2. 监控内存使用: 定期检查heap_free值变化趋势
  3. 验证接口状态: 使用curl命令测试API响应
  4. 检查依赖服务: 确认所有依赖模块正常运行

章节来源 - rest_api.c

结论

系统状态API为ESP32-S3蓝牙网关提供了完整、实时的系统监控能力。通过标准化的JSON接口,用户可以轻松获取设备的关键运行指标,包括硬件状态、网络连接情况和BLE扫描状态等重要信息。

该API设计简洁高效,具有良好的可扩展性和维护性,能够满足从个人开发者到企业级部署的各种应用场景需求。其模块化的架构设计也为未来的功能扩展奠定了坚实的基础。

建议在生产环境中定期监控API的响应时间和内存使用情况,确保系统长期稳定运行。同时,建议在客户端实现适当的重试机制和错误处理逻辑,提高系统的整体可靠性。