前端: 新增 RealTimeQuoteResponse 类型;新增 useRealtimeQuote Hook 并在报告页图表旁展示价格与时间戳(严格 TTL,无兜底)
FastAPI: 新增 GET /financials/{market}/{symbol}/realtime?max_age_seconds=.. 只读端点;通过 DataPersistenceClient 读取 Rust 缓存
Rust: 新增 realtime_quotes hypertable 迁移;新增 POST /api/v1/market-data/quotes 与 GET /api/v1/market-data/quotes/{symbol}?market=..;新增 DTO/Model/DB 函数;修正 #[api] 宏与路径参数;生成 SQLx 离线缓存 (.sqlx) 以支持离线构建
Python: DataPersistenceClient 新增 upsert/get 实时报价,并调整 GET 路径与参数
说明: TradingView 图表是第三方 websocket,不受我们缓存控制;页面数值展示走自有缓存通路,统一且可控。
2.6 KiB
2.6 KiB
WASM CLI - API调用功能已实现
🎉 问题已解决
之前WASM CLI只显示"Successfully matched command"而不执行实际API调用的问题已经修复!
🔧 修复内容
- 实现了真正的HTTP API调用: 使用JavaScript的fetch API替代了原来的命令匹配功能
- 添加了WASM绑定: 通过web-sys和wasm-bindgen-futures实现异步HTTP请求
- 修复了依赖冲突: 通过特性门控解决了reqwest在WASM环境下的兼容性问题
- 新增异步API:
run_command_async()函数现在可以真正执行API请求并返回结果
📋 主要更改
1. 新的初始化函数
// 旧版本
init_cli(spec_json)
// 新版本 - 需要同时传递OpenAPI规范和base URL
init_cli(spec_json, base_url)
2. 新的异步命令执行函数
// 新增 - 真正执行API调用
const result = await run_command_async("v1.hello.get");
// 旧版本 - 已废弃,只返回错误信息
const result = run_command("v1.hello.get");
🚀 使用方法
1. 初始化CLI
import init, { init_cli, run_command_async } from './pkg/forge_cli_wasm.js';
// 初始化WASM模块
await init();
// 获取OpenAPI规范
const response = await fetch('http://localhost:3000/api-docs/openapi.json');
const spec = await response.text();
// 初始化CLI
init_cli(spec, 'http://localhost:3000');
2. 执行API命令
// 执行GET请求
const result1 = await run_command_async("v1.hello.get");
// 执行带参数的请求
const result2 = await run_command_async("v1.add.get --a 1 --b 2");
// 执行POST请求(如果API支持)
const result3 = await run_command_async('v1.create.post --body \'{"name": "test"}\'');
🧪 测试
打开 test.html 文件在浏览器中测试:
- 确保你的服务已运行在 http://localhost:3000
- 点击 "Initialize CLI" 按钮
- 输入命令如 "v1.hello.get" 或 "v1.add.get --a 1 --b 2"
- 点击 "Run Command" 按钮
- 查看实际的API响应结果
⚠️ 重要注意事项
- 旧的
run_command函数已废弃: 请使用新的run_command_async函数 - 需要CORS支持: 确保你的API服务器支持跨域请求
- 异步操作: 所有API调用现在都是异步的,需要使用
await - 错误处理: API请求失败时会返回错误信息而不是抛出异常
🔍 调试
- 打开浏览器开发者工具查看控制台日志
- 网络请求会显示在Network标签页中
- 任何错误都会在输出区域显示
现在你的WASM CLI可以真正与API进行交互,不再只是"匹配命令"了!🎉