# 空气质量指数API Spec ## Why 当前已有实时天气查询API,空气质量是与天气相关的重要环境数据。需要实现独立的空气质量指数API后端,提供AQI、PM2.5、PM10等关键空气污染物数据,并在前端提供API详情文档和测试页面。 ## What Changes ### 后端变更 - 新增 `air_quality/` Django应用,实现空气质量查询API视图 - 使用 Open-Meteo 免费空气质量API(无需API Key) - 添加Swagger文档支持,遵循现有 `weather` 应用模式 - 注册URL路由到 `api/urls.py` - 响应格式与天气API保持一致:`{code, message, data}` ### 前端变更 - 新增 `AQIDetails` 页面(含桌面端和移动端),展示API文档和在线测试功能 - 页面结构复用 `ApiDetail` 组件模式(Hero区域 + Tabs文档/测试) - 添加路由注册 - 添加i18n翻译键 ### 数据变更 - 无数据库表变更(纯第三方API代理,无需持久化) ## Impact - Affected specs: `real-time-weather-api`(参考其模式) - Affected code: - `chunyu_project/air_quality/`(新增Django应用) - `chunyu_project/api/urls.py`(修改,添加路由) - `chunyu_project/settings.py`(修改,注册应用) - `chunyu_project_react/src/pages/AQIDetails/`(新增页面) - `chunyu_project_react/src/pages/AQIDetails/AQIDetailsMobile.tsx`(新增移动端) - `chunyu_project_react/src/App.tsx`(修改,添加路由) - `chunyu_project_react/src/locales/*.json`(修改,添加翻译) - `chunyu_project_react/src/pages/ApiDocs/ApiDocs.tsx`(可选,更新API列表) ## ADDED Requirements ### Requirement: 空气质量查询API The system SHALL provide an air quality query API that returns current air quality data for a given city. #### Scenario: 成功查询空气质量 - **WHEN** 用户发送 GET 请求到 `/api/air-quality/`,携带 `city` 参数 - **THEN** 系统返回 200 状态码及空气质量数据(AQI指数、PM2.5、PM10、O3、NO2、SO2、CO、空气质量等级) #### Scenario: 缺少必填参数 - **WHEN** 用户发送请求但未携带 `city` 参数 - **THEN** 系统返回 400 状态码及错误提示 #### Scenario: 城市不存在 - **WHEN** 用户请求的城市名称无法解析为地理坐标 - **THEN** 系统返回 404 状态码及友好错误提示 #### Scenario: 第三方API不可用 - **WHEN** Open-Meteo 服务暂时不可用或超时 - **THEN** 系统返回 502/503 状态码及友好错误提示 #### Scenario: 支持语言参数 - **WHEN** 用户携带 `lang` 参数(zh_cn 或 en) - **THEN** 系统返回对应语言的空气质量等级描述 ### Requirement: API文档集成 The air quality API SHALL be automatically included in the Swagger API documentation. #### Scenario: Swagger文档显示 - **WHEN** 管理员访问 `/swagger/` - **THEN** 空气质量查询API出现在API文档列表中,包含参数说明和响应示例 ### Requirement: 前端API详情页面 The system SHALL provide a frontend API documentation and testing page for the air quality API. #### Scenario: 页面访问 - **WHEN** 用户访问 `/api/air-quality-details` - **THEN** 显示空气质量API详情页面,包含文档标签和测试标签 #### Scenario: API文档展示 - **WHEN** 用户切换到"文档"标签 - **THEN** 显示接口描述、请求参数表、响应示例、错误码说明 #### Scenario: 在线测试 - **WHEN** 用户在"测试"标签中输入城市名并点击发送 - **THEN** 向 `/api/air-quality/` 发起真实请求并显示响应结果 ## MODIFIED Requirements ### Requirement: API路由注册 The main `api/urls.py` SHALL include the air quality API routes. #### Scenario: 路由注册 - **WHEN** Django启动 - **THEN** `/api/air-quality/` 路由正确映射到 AirQualityView ### Requirement: Django应用注册 The `INSTALLED_APPS` SHALL include the new air quality app. #### Scenario: 应用注册 - **WHEN** Django启动 - **THEN** `air_quality` 应用被正确加载 ## REMOVED Requirements 无移除的功能。