Pular para o conteúdo

SDKs (Python / TypeScript) e REST

Os SDKs são uma camada fina sobre o REST (cada método corresponde a 1 endpoint). Comportamentos comuns:

  • Idempotency-Key automático em toda chamada de mutação (retry seguro)
  • Retry automático com backoff exponencial em 429 / 5xx. 409 (lock otimista) não tem retry — o contrato é reler e reaplicar
  • Erros viram exceções com o suggested_fix do problem+json (um LLM consegue ler direto)
  • Helpers práticos: 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

Recursos: 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");
PacoteCódigo-fonte e issues
Python + CLId2b-sdk no PyPIgithub.com/600/d2b-sdk (python/)
TypeScriptd2b-sdk no npmgithub.com/600/d2b-sdk (typescript/)

A distribuição chama-se d2b-sdk nos dois registros. O pacote de import do Python e o comando são d2b (o d2b do PyPI é um projeto sem relação), então com uvx escreve-se uvx --from d2b-sdk d2b …. O repositório do GitHub é um espelho somente leitura (os SDKs são desenvolvidos no repositório principal do D2B): pull requests não são mesclados lá; issues são bem-vindas. Cada release sincroniza a mesma tag (sdk-py-v* / sdk-ts-v*) para o espelho, que publica nos dois registros (npm com provenance).

  • URL base: https://d2b.dev (paths em /api/v1/...; administração de tenants em /api/control/...)
  • Autenticação: Authorization: Bearer <PAT> (/api/v1), Account API key (/api/control)
  • Mutações aceitam o header Idempotency-Key (mesma chave + mesmo body reproduzem a resposta original)
  • OpenAPI 3.1: openapi.json — a referência da API é gerada a partir dele