콘텐츠로 이동

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()
Terminal window
pip install d2b-sdk
from 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") # re-read → re-apply

리소스: workbooks / sources / tables / query / transforms / versions / jobs / reviews / sheets / charts / export / webhooks.

Terminal window
npm install d2b-sdk
import { 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, "sales", "A1:D10"); // read in Excel coordinates
await client.sheets.put(wb, "summary", [
{ kind: "heading", text: "Monthly summary" },
{ kind: "table_view", table: "sales" },
]);
const xlsx = await client.sheets.render(wb, "summary");
패키지소스 · 이슈
Python + CLIPyPI의 d2b-sdkgithub.com/600/d2b-sdk(python/)
TypeScriptnpm의 d2b-sdkgithub.com/600/d2b-sdk(typescript/)

배포 이름은 두 레지스트리 모두 d2b-sdk입니다. Python의 import 패키지와 커맨드는 d2b(PyPI의 d2b는 무관한 프로젝트)이므로 uvx에서는 uvx --from d2b-sdk d2b …로 씁니다. GitHub 저장소는 읽기 전용 미러(SDK는 D2B 본 저장소에서 개발)라서 Pull Request는 머지되지 않지만 Issue는 환영합니다. 릴리스마다 같은 태그(sdk-py-v* / sdk-ts-v*)가 미러로 동기화되고, 거기서 두 레지스트리로 배포됩니다(npm은 provenance 포함).

  • 베이스 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 레퍼런스는 여기에서 생성됩니다