> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainstream.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 概覽

> 選擇適合你的 ChainStream SDK

## 官方 SDK

ChainStream 提供多種語言的官方 SDK，封裝了常用 API 操作，提供更好的開發體驗。

<CardGroup cols={2}>
  <Card title="TypeScript" icon="js" href="/zh-Hant/sdks/typescript">
    適用於 Node.js 和瀏覽器應用
  </Card>

  <Card title="Python" icon="python" href="/zh-Hant/sdks/python">
    適用於資料分析和後端服務
  </Card>

  <Card title="Go" icon="golang" href="/zh-Hant/sdks/go">
    適用於高效能後端服務
  </Card>

  <Card title="Rust" icon="rust" href="/zh-Hant/sdks/rust">
    適用於系統程式設計和高效能應用
  </Card>
</CardGroup>

## SDK 功能

所有 SDK 都提供：

* **REST API 客戶端**：呼叫所有 ChainStream 資料 API
* **WebSocket 客戶端**：訂閱實時資料流
* **自動認證**：自動管理 Token
* **型別安全**：完整的型別定義（TypeScript、Go、Rust）

## 安裝

<Tabs>
  <Tab title="TypeScript">
    ```bash theme={null}
    npm install @chainstream-io/sdk
    ```
  </Tab>

  <Tab title="Python">
    ```bash theme={null}
    pip install chainstream-sdk
    ```
  </Tab>

  <Tab title="Go">
    ```bash theme={null}
    go get github.com/chainstream-io/chainstream-go-sdk
    ```
  </Tab>

  <Tab title="Rust">
    ```toml theme={null}
    # 添加到 Cargo.toml
    [dependencies]
    chainstream-sdk = "0.1"
    ```
  </Tab>
</Tabs>

## 快速對比

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    import { ChainStreamClient } from '@chainstream-io/sdk';

    const client = new ChainStreamClient('YOUR_ACCESS_TOKEN');

    // REST API 调用
    const token = await client.token.getToken('sol', 'TOKEN_ADDRESS');

    // WebSocket 订阅
    client.stream.subscribeTokenCandles({
      chain: 'sol',
      tokenAddress: 'TOKEN_ADDRESS',
      resolution: Resolution['1s'],
      callback: (data) => console.log(data)
    });
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    from chainstream import ChainStreamClient
    from chainstream.stream import Resolution

    client = ChainStreamClient(access_token='YOUR_ACCESS_TOKEN')

    # REST API 调用
    token = await client.token.get_metadata('sol', 'TOKEN_ADDRESS')

    # WebSocket 订阅
    await client.stream.subscribe_token_candles(
        chain='sol',
        token_address='TOKEN_ADDRESS',
        resolution=Resolution.S1,
        callback=lambda data: print(data)
    )
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    import chainstream "github.com/chainstream-io/chainstream-go-sdk"

    client, _ := chainstream.NewChainStreamClient(accessToken, &chainstream.ChainStreamClientOptions{})

    // REST API 调用
    resp, _ := client.Token.GetToken(ctx, "sol", "TOKEN_ADDRESS")

    // WebSocket 订阅
    client.Stream.SubscribeTokenCandles("sol", "TOKEN_ADDRESS", token.N1s, func(data stream.TokenCandle) {
        fmt.Println(data)
    }, "")
    ```
  </Tab>

  <Tab title="Rust">
    ```rust theme={null}
    use chainstream_sdk::{ChainStreamClient, stream::{Resolution, TokenCandle}};

    let client = ChainStreamClient::new("YOUR_ACCESS_TOKEN", None);

    // WebSocket 订阅
    client.stream.subscribe_token_candles(
        "sol",
        "TOKEN_ADDRESS",
        Resolution::X1s,
        |candle: TokenCandle| {
            println!("{:?}", candle);
        },
        None,
    ).await?;
    ```
  </Tab>
</Tabs>

## SDK vs 直接 API

| 特性        | SDK           | 直接 API     |
| --------- | ------------- | ---------- |
| 型別安全      | 是（TS/Go/Rust） | 否          |
| 認證管理      | 自動處理          | 手動管理       |
| 錯誤處理      | 封裝友好          | 原始 HTTP 錯誤 |
| WebSocket | 內建支援          | 需手動實現      |
| 程式碼量      | 更少            | 較多         |
| 靈活性       | 中等            | 完全靈活       |

## 下一步

<CardGroup cols={2}>
  <Card title="TypeScript SDK" icon="js" href="/zh-Hant/sdks/typescript">
    檢視 TypeScript 詳細文件
  </Card>

  <Card title="Python SDK" icon="python" href="/zh-Hant/sdks/python">
    檢視 Python 詳細文件
  </Card>

  <Card title="Go SDK" icon="golang" href="/zh-Hant/sdks/go">
    檢視 Go 詳細文件
  </Card>

  <Card title="Rust SDK" icon="rust" href="/zh-Hant/sdks/rust">
    檢視 Rust 詳細文件
  </Card>
</CardGroup>
