跳至主要內容

API 矩陣

所有三個 TTOON SDK 都提供完全一致的 API 表面:在 Rust、JavaScript 和 Python 之間達到 18/18 的奇偶校驗 (parity)。

分類後的 API 參考頁

詳細 API 參考改為依工作型態分類,而不是依語言拆分:

批次反序列化

處理能力RustJavaScriptPython
文字 → 物件/IRfrom_ttoon(text)parse(text)loads(text)
文字 → Arrowread_arrow(text)readArrow(text)read_arrow(text)

所有的批次反序列化 API 都會自動偵測輸入的格式 (T-TOON / T-JSON / typed unit)。

批次序列化

處理能力RustJavaScriptPython
物件 → T-TOONto_ttoon(node)stringify(value)dumps(obj)
物件 → T-JSONto_tjson(node)toTjson(value)to_tjson(obj)
Arrow → T-TOONarrow_to_ttoon(table)stringifyArrow(table)dumps(df/table)
Arrow → T-JSONarrow_to_tjson(table)stringifyArrowTjson(table)stringify_arrow_tjson(table)

Python 的 dumps() 會自動偵測 Polars DataFrame 和 PyArrow Table/RecordBatch 輸入,並在內部將他們路由至 Arrow 路徑。

串流反序列化

處理能力RustJavaScriptPython
T-TOON → 物件StreamReaderstreamRead(source, opts)stream_read(source, schema)
T-JSON → 物件TjsonStreamReaderstreamReadTjson(source, opts)stream_read_tjson(source, schema)
T-TOON → ArrowArrowStreamReaderstreamReadArrow(source, opts)stream_read_arrow(source, schema)
T-JSON → ArrowTjsonArrowStreamReaderstreamReadArrowTjson(source, opts)stream_read_arrow_tjson(source, schema)

所有的串流讀取器都需要一個 StreamSchema 來定義欄位的名稱與型別。

串流序列化

處理能力RustJavaScriptPython
物件 → T-TOONStreamWriterstreamWriter(sink, opts)stream_writer(sink, schema)
物件 → T-JSONTjsonStreamWriterstreamWriterTjson(sink, opts)stream_writer_tjson(sink, schema)
Arrow → T-TOONArrowStreamWriterstreamWriterArrow(sink, opts)stream_writer_arrow(sink, schema)
Arrow → T-JSONTjsonArrowStreamWriterstreamWriterArrowTjson(sink, opts)stream_writer_arrow_tjson(sink, schema)

所有的串流寫入器都需要一個 StreamSchema

直接轉碼

處理能力RustJavaScriptPython
T-JSON → T-TOONtjson_to_ttoon(text)tjsonToTtoon(text)tjson_to_ttoon(text)
T-TOON → T-JSONttoon_to_tjson(text, mode)ttoonToTjson(text)ttoon_to_tjson(text)

轉碼只會經過 Rust 的內部表示 (IR) — 它不會具現化為特定語言的原生物件。所有的具型別語意 (decimal, uuid 等等) 皆會完整保留。

實用工具

處理能力RustJavaScriptPython
格式偵測detect_format(text)detectFormat(text)detect_format(text)
註冊編解碼器— (使用原生型別)use(codecs)use(codecs)
Schema 定義StreamSchemaStreamSchemaStreamSchema

覆蓋率統計

維度RustJavaScriptPython
批次 (反序列化 + 序列化)6/66/66/6
串流 (反序列化 + 序列化)8/88/88/8
轉碼2/22/22/2
實用工具2/22/22/2
總計18/1818/1818/18

編解碼器註冊被排除在 18/18 校驗的計算外,因為它是 JS/Python 專屬的;此矩陣只計算在三種 SDK 中都存在的 API。

架構注意事項

作為標準引擎的 Rust

Rust ttoon-core 是最標準的原生實作。Python 和 JavaScript SDK 都在背後委託這個 Rust 核心:

  • Python — 透過 PyO3 的原生擴充 (原生的編譯進 wheel 中)
  • JavaScript — 透過 WASM 的橋接器 (打包進了 npm 套件中)

這確保了完全一致的解析和序列化行為能夠跨平台執行。

串流格式慣例

  • T-TOON 串流 使用 [*]{fields}: 作為無界限 (unbounded) 的表格標頭 (相較於 [N]{fields}: 這種宣告了固定行數的形式)。
  • T-JSON 串流 使用一個最頂層的物件陣列,其中的純量值具有已知 schema。

Arrow 路徑的最佳化

Rust 核心包含了一個為 T-JSON 輸入準備的直接 Arrow 路徑 (tjson_arrow::read_arrow_tjson_direct),這可以跳過 Token/Node 的中介層,明顯降低大型資料集的記憶體消耗量。這個最佳化能透過共享的核心使所有的 SDK 都能因此受惠。