Rust SDK
Zanbara Rust SDK 提供类型安全、高性能的 API 客户端,适合构建低延迟交易系统和量化策略。
添加依赖
在 Cargo.toml 中添加:
[dependencies]
zanbara-sdk = "0.1.0"
tokio = { version = "1", features = ["full"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"快速开始
use zanbara_sdk::{ZanbaraClient, Result};
#[tokio::main]
async fn main() -> Result<()> {
// 创建客户端
let client = ZanbaraClient::new("https://api.zanbarax.com/v1")?;
// 获取订单簿
let orderbook = client.get_orderbook("BTC-PERP", 20).await?;
println!("最优买价: {}", orderbook.bids[0].price);
println!("最优卖价: {}", orderbook.asks[0].price);
// 获取市场统计
let stats = client.get_market_stats("BTC-PERP").await?;
println!("最新价: {}", stats.last_price);
Ok(())
}REST API 客户端
初始化
use zanbara_sdk::{ZanbaraClient, ClientConfig};
// 基础配置
let client = ZanbaraClient::new("https://api.zanbarax.com/v1")?;
// 自定义配置
let config = ClientConfig::builder()
.base_url("https://api.zanbarax.com/v1")
.timeout(std::time::Duration::from_secs(10))
.api_key("YOUR_API_KEY")
.build()?;
let client = ZanbaraClient::with_config(config)?;市场数据
use zanbara_sdk::{ZanbaraClient, Result};
#[tokio::main]
async fn main() -> Result<()> {
let client = ZanbaraClient::new("https://api.zanbarax.com/v1")?;
// 获取所有市场
let markets = client.get_markets().await?;
for market in markets {
println!("{}: {}/{}", market.symbol, market.base_currency, market.quote_currency);
}
// 获取订单簿
let orderbook = client.get_orderbook("BTC-PERP", 20).await?;
// 获取最新成交
let trades = client.get_trades("BTC-PERP", 50).await?;
// 获取K线数据
let klines = client.get_klines("BTC-PERP", "1h", None, None, 100).await?;
Ok(())
}账户操作
// 设置 API Key
client.set_api_key("YOUR_API_KEY");
// 获取持仓
let positions = client.get_positions("YOUR_WALLET_ADDRESS").await?;
for pos in positions {
println!("{}: {} {}", pos.market, pos.side, pos.size);
}
// 获取订单
let orders = client.get_orders("YOUR_WALLET_ADDRESS", Some("open")).await?;
// 获取成交历史
let fills = client.get_fills("YOUR_WALLET_ADDRESS", Some("BTC-PERP"), 50).await?;WebSocket 客户端
use zanbara_sdk::{ZanbaraWebSocket, WsEvent};
use futures_util::StreamExt;
#[tokio::main]
async fn main() -> Result<()> {
let mut ws = ZanbaraWebSocket::connect("wss://ws.zanbarax.com").await?;
// 订阅 Ticker
ws.subscribe_ticker("BTC-PERP").await?;
// 接收消息
while let Some(event) = ws.next().await {
match event? {
WsEvent::Ticker(ticker) => {
println!("Ticker: {} ${}", ticker.market, ticker.last_price);
}
WsEvent::Connected => {
println!("✓ WebSocket 已连接");
}
WsEvent::Disconnected => {
println!("✗ WebSocket 已断开");
}
_ => {}
}
}
Ok(())
}类型安全
use zanbara_sdk::types::{
Market, Orderbook, Trade, Kline, Position, Order, Fill
};
use rust_decimal::Decimal;
// 所有数值类型使用 Decimal,避免浮点误差
fn calculate_position_value(position: &Position) -> Decimal {
position.size * position.entry_price
}
// 枚举类型确保类型安全
match order.side {
OrderSide::Buy => println!("买单"),
OrderSide::Sell => println!("卖单"),
}错误处理
use zanbara_sdk::{Error, Result};
async fn fetch_orderbook() -> Result<()> {
match client.get_orderbook("BTC-PERP", 20).await {
Ok(orderbook) => {
println!("获取成功: {:?}", orderbook);
}
Err(Error::Api { message, code, status }) => {
eprintln!("API 错误: {} (code: {}, status: {})", message, code, status);
}
Err(Error::Network(e)) => {
eprintln!("网络错误: {}", e);
}
Err(e) => {
eprintln!("未知错误: {}", e);
}
}
Ok(())
}性能优化
// 使用连接池
let client = ZanbaraClient::builder()
.pool_max_idle_per_host(10)
.pool_idle_timeout(std::time::Duration::from_secs(90))
.build()?;
// 并发请求
use futures::future::join_all;
let markets = vec!["BTC-PERP", "ETH-PERP", "SOL-PERP"];
let futures: Vec<_> = markets.iter()
.map(|market| client.get_market_stats(market))
.collect();
let results = join_all(futures).await;下一步
Last updated