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