6.9 KiB
6.9 KiB
PolyWeather API 文档(v1.5.1)
最后更新:2026-03-24
本文档描述当前对外可用 API 口径(web/app.py + web/routes.py + frontend/app/api/*)。
1. 基础信息
- 后端直连:
http://127.0.0.1:8000 - 前端 BFF:
https://polyweather-pro.vercel.app/api/* - 返回格式:
application/json
2. 请求链路
flowchart LR
FE["Browser / Dashboard"] --> BFF["Next.js Route Handlers (/api/*)"]
BFF --> API["FastAPI (/web/app.py + /web/routes.py)"]
API --> WX["Weather Collector"]
API --> ANA["DEB + Trend + Probability + Market Scan"]
API --> PAY["Payment Intent + Event + Confirm Loops"]
API --> OBS["healthz / system status / metrics"]
3. 天气分析接口
| 接口 | 方法 | 用途 |
|---|---|---|
/api/cities |
GET | 监控城市列表 |
/api/city/{name} |
GET | 城市主分析 |
/api/city/{name}/summary |
GET | 轻量摘要 |
/api/city/{name}/detail |
GET | 聚合详情(含 market_scan) |
/api/history/{name} |
GET | 历史对账 |
GET /api/city/{name}/detail
可选参数:
force_refresh=true|falsemarket_slug=<slug>target_date=YYYY-MM-DD
重点字段:
market_scan.availablemarket_scan.signal_labelmarket_scan.edge_percentmarket_scan.anchor_model / anchor_high / anchor_settlementmarket_scan.yes_buy / no_buymarket_scan.primary_market.tradablepeak.first_h / peak.last_h / peak.statusvertical_profile_signal.heating_setup / suppression_risk / trigger_risk / mixing_strengthtaf.signal.peak_window / suppression_level / disruption_level / markers
detail 新增结构信号说明
/api/city/{name}/detail 现在会返回一组更偏交易场景的结构字段:
1. peak
first_h:预计峰值窗口起始小时last_h:预计峰值窗口结束小时status:before_peak | near_peak | after_peak
这组字段用于让日内结构信号围绕真实峰值窗口分析,而不是固定只看下午。
2. vertical_profile_signal
重点字段:
sourcewindowcape_maxcin_minlifted_index_minboundary_layer_height_maxshear_10m_180m_maxsuppression_risktrigger_riskmixing_strengthshear_riskheating_setupheating_scoresummary_zhsummary_en
这组字段对应前端“高空结构信号 / Upper-Air Structure”卡片。
3. taf.signal
仅对非香港机场城市启用。当前已支持解析:
FMTEMPOBECMGPROB30PROB40
重点字段:
peak_windowsegmentsmarkerssuppression_leveldisruption_levelwind_shiftsummary_zhsummary_en
markers 会被前端温度走势图拿来做 TAF 时段 / TAF Timing 标记。
4. 鉴权与账户接口
| 接口 | 方法 | 用途 |
|---|---|---|
/api/auth/me |
GET | 当前登录态、积分、订阅状态 |
/api/auth/me 关键字段:
authenticateduser_id,emailpoints,weekly_points,weekly_ranksubscription_active,subscription_plan_code,subscription_expires_at
5. 支付接口
| 接口 | 方法 | 用途 |
|---|---|---|
/api/payments/config |
GET | 支付配置、代币列表、套餐、积分抵扣规则 |
/api/payments/runtime |
GET | 支付运行态、RPC 状态、event loop 状态、最近审计事件 |
/api/payments/wallets |
GET | 当前用户已绑定钱包 |
/api/payments/wallets/challenge |
POST | 获取绑定签名 challenge |
/api/payments/wallets/verify |
POST | 提交签名并绑定钱包 |
/api/payments/intents |
POST | 创建支付意图(intent) |
/api/payments/intents/{intent_id} |
GET | 查询 intent 最新状态 |
/api/payments/intents/{intent_id}/submit |
POST | 提交交易哈希 |
/api/payments/intents/{intent_id}/confirm |
POST | 手动触发确认 |
/api/payments/reconcile-latest |
POST | 对当前登录用户最近一笔 intent 做恢复性确认 |
支付状态建议
前端流程建议:
POST /intents- 钱包发链上交易
POST /submitPOST /confirm- 若 pending,轮询
GET /intents/{id}直到confirmed
6. 运维与观测接口
| 接口 | 方法 | 用途 |
|---|---|---|
/healthz |
GET | 基础健康检查 |
/api/system/status |
GET | 系统状态、功能开关、rollout 状态、轻量指标摘要 |
/metrics |
GET | Prometheus 风格指标导出 |
/api/system/status 当前会包含:
features.state_storage_modeprobability.decisionprobability.ready_for_primarymetrics
/metrics 当前会导出:
polyweather_http_requests_totalpolyweather_http_request_duration_ms_*polyweather_source_requests_totalpolyweather_source_request_duration_ms_*
7. Ops 管理接口
这些接口主要给 /ops 管理后台使用,默认要求:
- 已登录
- 当前邮箱位于
POLYWEATHER_OPS_ADMIN_EMAILS
| 接口 | 方法 | 用途 |
|---|---|---|
/api/ops/users |
GET | 按 Telegram ID / 用户名 / 邮箱查询用户 |
/api/ops/leaderboard/weekly |
GET | 本周积分榜 |
/api/ops/memberships |
GET | 当前有效会员(已按用户去重,保留最晚到期) |
/api/ops/users/grant-points |
POST | 手动补分 |
/api/ops/payments/incidents |
GET | 支付异常单(仅 payment_intent_failed) |
/api/ops/payments/incidents/{event_id}/resolve |
POST | 标记支付异常单已处理 |
/api/ops/payments/incidents 当前支持:
reason=<receiver_mismatch|sender_mismatch|event_mismatch|tx_reverted>- 默认不返回已标记处理的记录
- 重点用于排查“已付款未开通”“打到旧收款地址”等事故
8. 缓存策略(当前)
cities/summary/history:BFF 支持ETag + 304summary?force_refresh=true:Cache-Control: no-store- 详情接口与支付接口:
no-store METAR/TAF/ settlement current 由后端各自维护短 TTL 缓存
9. 调试示例
查询未来日期 market_scan
curl -s "http://127.0.0.1:8000/api/city/ankara/detail?force_refresh=true&target_date=2026-03-12"
校验支付配置
curl -s http://127.0.0.1:8000/api/payments/config | python3 -m json.tool
查看支付运行态
curl -s http://127.0.0.1:8000/api/payments/runtime | python3 -m json.tool
查看支付异常单
curl -s "http://127.0.0.1:8000/api/ops/payments/incidents?reason=receiver_mismatch" | python3 -m json.tool
查看系统状态
curl -s http://127.0.0.1:8000/api/system/status | python3 -m json.tool
观察支付自动补单
docker compose logs -f polyweather | egrep "payment event loop started|payment confirm loop started|payment auto-confirmed"
10. AGPL 与公开口径说明
本仓库代码自 2026-03-30 起采用 AGPL-3.0-only。对外公开文档仅覆盖通用 API 契约;生产商业策略参数、私有运营阈值与托管服务能力不在公开文档披露。