コンテンツにスキップ

REST API

REST APIは、インターフェースが使っているものと同じです。非公開のルートは存在しません。URLには物理名が使われます。SQLで読むときと同じ名前です。

/api/v1/<tenant>/data/<base>/<table>
/api/v1/t4z56fq/data/b_t4z56fq_ventes/opportunites

インターフェースで、データベースの ⋯ メニュー → APIとエージェント → APIとMCPのトークン… を開きます。データベース、またはそのプロジェクトに対して管理レベルを持つ人が、パスワードを確認したうえで、このデータベース(すべての環境、または1つの環境のみ)に限定された連携トークンをここで作成します——パスワードを持たず、IDプロバイダーでログインするアカウントは、まだそれができません。デフォルトは読み取り専用です。トークンは一度しか表示されないので、環境変数に保存してください。

トークンは読み取りを行い、書き込み権限で作成されていれば作成・変更も行い、そのために作成されていれば削除も行います——「読み取り、書き込みと削除」の権限です。ただし、連鎖的なリレーションによって他の行も一緒に削除されてしまう行は除きます。作成した人を超える権限を持つことはありません。

Fenêtre de terminal
export BASEDB_TOKEN=bdb_…
curl "http://localhost:3000/api/v1/t4z56fq/data/b_t4z56fq_ventes/opportunites?limit=20" \
-H "Authorization: Bearer $BASEDB_TOKEN"

複数の環境——本番、ステージング…——を持つデータベースでも、データベース全体用に作成されたトークンにとっては1つのデータベースのままです。パスには本番の名前でデータベースを指定し、ヘッダーX-Basedb-Environmentが環境を選びます:

Fenêtre de terminal
curl "http://localhost:3000/api/v1/t4z56fq/data/b_t4z56fq_ventes/opportunites" \
-H "Authorization: Bearer $BASEDB_TOKEN" \
-H "X-Basedb-Environment: recette"
  • ヘッダーがなければ、パスが指す環境になります:b_t4z56fq_ventesは本番、b_t4z56fq_ventes_recetteはステージングで——どちらの書き方も有効です。
  • ?environment=recetteは、ヘッダーを付けられないクライアント向けに、同じ働きをします。
  • 環境は、そのバッジの名前で指定します。大文字・小文字とアクセント記号は区別されません。productionでも指定できます。データベースにない環境は、存在しないリソースと同じく404を返します。
  • GET /api/v1/<tenant>/meta/basesは、各環境をenvironmentブロック(label、production)とともに一覧します。ヘッダーを付けると、その環境だけが一覧されます。

作成時に1つの環境だけに限定されたトークンは、他の環境を一切開きません:ヘッダーを付けても何も変わりません。権限は常に、環境ごとに、作成した人の権限と照合されます。

パラメーター役割
filter読みやすい式:statut eq "gagne" and montant gte 10000
sort-montant,nom
fields返す列
limit、after暗号化されたカーソルによるページング:あるページのmeta.next_cursorをafterに渡すと次のページが得られます(meta.has_next_page)
links=displayリレーションを表示値付きで返します
count=exact総件数(上限は100,000)
variables=raw長文テキストを、行の値に置き換えず、{{colonne}}を含めて書かれたとおりに返します

演算子:eq、ne、eq_ci、contains、starts_with、ends_with、in、is_null、gt、gte、lt、lte、between。これらをand、or、notと括弧で組み合わせます。フィルターはリレーションをたどれます:clients_id.ville eq "Lyon"。

Fenêtre de terminal
curl -X POST "http://localhost:3000/api/v1/t4z56fq/data/b_t4z56fq_ventes/opportunites" \
-H "Authorization: Bearer $BASEDB_TOKEN" -H "content-type: application/json" \
-d '{"values": {"nom": "Audit RGPD", "statut": "nouveau", "montant": 12000}}'

PATCH …/<table>/<_id>は、同じ本文{"values": {…}}で行を更新します。エラーの形式は1つに統一されています:{ "code": "…", "details": {…}, "request_id": "…" }。コードは原因ごとに固定です。

各書き込みはx-basedb-transactionヘッダーを返します。これをPOST /api/v1/<tenant>/history/undo({"transaction": "…"})に渡すと、インターフェースのCtrl+Zと同じように書き込みが元に戻ります。その後に行が変更されていた場合は拒否されます。

同じトークンで、次の操作ができます:

ルート役割
GET …/data/<base>/<table>/aggregateフィルターに該当する全行の集計:aggregates=montant:sum,nom:filled、group=statut
GET …/data/<base>/<table>/<_id>/comments、POST行のコメントの読み書き
POST /api/v1/<tenant>/automations/<id>/runボタンをトリガーとするオートメーションを、行に対して実行します({"record": "…"})
GET /api/v1/<tenant>/meta/bases/<base>/dashboardsデータベースのダッシュボード
GET /api/v1/<tenant>/meta/usersワークスペースのメンバー(メンバーフィールド用)
GET /api/v1/<tenant>/meta/templatesギャラリーのデータベーステンプレート
GET /api/v1/<tenant>/events?base=<base>&table=<table>テーブルをリアルタイムで追跡します:信号を返し、その後は上記のルートで読み直します(Webhookを参照)

共有ビューは、アカウントなしで読めます:GET /api/v1/views/<jeton>と…/rowsはJSONで、…/calendar.icsはiCalendarで取得できます。

構築(オートメーション、ダッシュボード、連携の作成)は、インターフェースのセッションに限られます。トークンは行を読み書きするためのもので、データベースを変更するものではありません。

テーブルと、単一選択・複数選択フィールドの各選択肢には、色(color、#rrggbb)とアイコン(icon、インターフェースが描画するLucideのアイコン名:truck、circle-check、flame…)があります。GET …/meta/bases/<base>は、データベース、そのテーブル、フィールドの選択肢について、これらを返します。

これらを指定するには、構造を変更できる人のアクセストークン(POST /auth/session/access)を使います——連携トークンはデータベースを変更しません:

ルート本文
POST …/admin/bases/<base>/tables{"label": "Tickets", "color": "#dc2626", "icon": "flame", "fields": […]}
PATCH …/admin/bases/<base>/tables/<table>{"color": "#2563eb", "icon": "inbox"}——3つのキーcolor、icon、imageは一緒に扱われます:1つでも指定すると、3つとも置き換えられます
POST …/admin/bases/<base>/tables/<table>/fields{"label": "Priorité", "kind": "select", "options": [{"value": "haute", "color": "#dc2626", "icon": "flame"}, …]}
PUT …/admin/bases/<base>/tables/<table>/fields/<champ>/optionsオプションの一覧全体を、順番どおりに、それぞれの色とアイコンとともに渡します

エージェントはMCPサーバーを通じて、これらの変更を提案します。フィールドにはアイコンを選ぶ項目がありません:インターフェースは、その型のアイコンを描画します。

テンプレートからのデータベース作成

Section titled “テンプレートからのデータベース作成”

インストールされるアプリケーションは、1回の呼び出しでデータベースを作成します:サーバーがテンプレートを適用し——テーブル、フィールド、リレーション、サンプル行、ビュー、ダッシュボード、オートメーション——、いずれかのステップが失敗した場合は、データベースを何も残しません。

Fenêtre de terminal
curl -X POST "http://localhost:3000/api/v1/t4z56fq/admin/bases" \
-H "Authorization: Bearer $ACCES" -H "content-type: application/json" \
-d '{"template": "crm", "label": "Ventes", "rows": false}'

templateは、ギャラリーのテンプレートのキー、またはテンプレート形式に沿ったテンプレート全体です。Accept: application/x-ndjsonヘッダーを付けると、応答は1行ずつ届きます:ステップごとに{"step": …}の行が送られ、最後に作成されたデータベースが届きます。この呼び出しには、データベースを作成できる人のアクセストークンが必要です(ログイン後のPOST /auth/session/access):連携トークンは既存のデータベースしか開けません。

basedbのトークンは、basedbの外では検証できません。トークンを受け取ったアプリケーション——例えば、本人のトークンを使ってbasedbから開かれたツール——は、自分自身の連携トークンを使って、そのトークンの価値を尋ねます(イントロスペクション、RFC 7662):

Fenêtre de terminal
curl -X POST "http://localhost:3000/auth/introspect" \
-H "Authorization: Bearer $BASEDB_TOKEN" \
--data-urlencode "token=$JETON_RECU"
{ "active": true, "token_type": "access_token",
"sub": "0195a…", "email": "claire@example.com", "name": "Claire Martin",
"tenant": "t4z56fq", "groups": ["Commerciaux"], "exp": 1790000000 }

価値のないトークン——不明、期限切れ、取り消し済み、セッション終了、別のワークスペース——は、理由を示さずに{"active": false}と応答します。応答はリアルタイムで読み取られます:ログアウトはすぐに反映されます。連携トークンの場合、応答にはそれが開くデータベース(base、その本番)、すべての環境を開くのか(environments:all)1つだけなのか(one)、そのアクセス権(read、write、またはdelete)、そしてその窓口も含まれます。

各データベースには、APIとMCPのドキュメントページがあります。テーブルごとに、エンドポイント、列、cURLとJavaScriptの例が載っています。自分の権限で絞り込まれるため、2人の閲覧者はそれぞれ別の版を見ることになり、画面の言語で書かれます。OpenAPI 3.1版(/api/v1/<tenant>/meta/bases/<base>/openapi.json)もあり、BearerトークンとX-Basedb-Environmentヘッダーが宣言されています。名前、パス、エラーコードは、どの言語でも変わりません。

データベースの生成ドキュメント

basedbは、AIネイティブなソフトウェアスタジオEodiaが開発するフリーソフトウェアです。