SDK(Python / TypeScript)と REST
SDK は REST の薄い皮です(すべてのメソッドが 1 エンドポイントに対応)。共通の振る舞い:
- すべての変異呼び出しに
Idempotency-Keyを自動付与(リトライ安全) - 429 / 5xx は指数バックオフで自動リトライ。409(楽観ロック)はリトライしません — 再読込して再適用するのがコントラクト
- エラーは problem+json の
suggested_fix込みで例外化(LLM がそのまま読める) - 実務ヘルパ:
jobs.wait()/tables.iter_rows()/webhooks.verify_signature()
Python
Section titled “Python”pip install d2b-sdkfrom d2b import D2BClient, ConflictError
client = D2BClient(api_key="d2b_pat_...", base_url="https://d2b.dev")wb = client.workbooks.create(title="monthly")["id"]client.sources.upload(wb, "sales.xlsx", wait=True)
page = client.tables.rows(wb, "sales")try: client.tables.upsert_rows(wb, "sales", rows=[{"product": "apple", "qty": 3}], expected_version=page["edit_version"])except ConflictError: page = client.tables.rows(wb, "sales") # 再読込 → 再適用リソース: workbooks / sources / tables / query / transforms / versions / jobs / reviews / sheets / charts / export / webhooks。
TypeScript
Section titled “TypeScript”npm install d2b-sdkimport { D2BClient } from "d2b-sdk";
const client = new D2BClient({ apiKey: "d2b_pat_...", baseUrl: "https://d2b.dev" });const wb = (await client.workbooks.create({ title: "monthly" })).id as string;await client.sources.upload(wb, fileBlob, { filename: "sales.xlsx", wait: true });const grid = await client.tables.a1(wb, "売上明細", "A1:D10"); // Excel 座標で読むawait client.sheets.put(wb, "summary", [ { kind: "heading", text: "月次サマリー" }, { kind: "table_view", table: "売上明細" },]);const xlsx = await client.sheets.render(wb, "summary");配布元とソースコード
Section titled “配布元とソースコード”| パッケージ | ソース・Issue | |
|---|---|---|
| Python + CLI | d2b-sdk on PyPI | github.com/600/d2b-sdk(python/) |
| TypeScript | d2b-sdk on npm | github.com/600/d2b-sdk(typescript/) |
配布名は両レジストリとも d2b-sdk です。Python の import パッケージとコマンドは d2b(PyPI の d2b は無関係のプロジェクト)なので、uvx では uvx --from d2b-sdk d2b … と書きます。GitHub のリポジトリは読み取り専用のミラーで(開発は D2B 本体のリポジトリ)、Pull Request は受け付けませんが Issue は歓迎します。リリースごとに同じタグ(sdk-py-v* / sdk-ts-v*)がミラーに同期され、そこから両レジストリへ公開されます(npm は provenance 付き)。
REST を直接
Section titled “REST を直接”- ベース URL:
https://d2b.dev(パスは/api/v1/...、テナント管理は/api/control/...) - 認証:
Authorization: Bearer <PAT>(/api/v1)、Account API key(/api/control) - 変異系は
Idempotency-Keyヘッダ対応(同一キー + 同一ボディで初回応答を再生) - OpenAPI 3.1: openapi.json — API リファレンスはここから生成されます