
ToolJet 接入 Baserow 数据源连接配置与 7 大行级操作实战指南【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet本文围绕 ToolJet 官方文档 docs/docs/data-sources/baserow.md 展开讲解如何将 ToolJet 应用连接到 Baserow无代码/低代码数据库服务并完成数据的读、写、排序与删除同时结合仓库中 Baserow 插件源码逐一揭示 7 个查询操作背后真实调用的 Baserow REST API。读完你可以在自己的 ToolJet 应用里完成 Baserow 数据源的创建、连接测试与完整的行级 CRUD含移动行配置。Baserow 数据源能做什么Baserow 是一款开源在线数据库提供类似 Airtable 的表格化数据模型。ToolJet 将 Baserow 实现为一种API 型数据源用于在其构建的内部工具、看板等应用中读取和写入 Baserow 表格数据例如把表单提交写入 Baserow、把 Baserow 表格渲染到表格组件、在界面上拖拽调整行顺序等。该数据源由独立插件包承载位于仓库 plugins/packages/baserow其清单声明manifest.json将该数据源归类为type: api依赖got完成 HTTP 请求、json5解析用户输入的对象字面量运行时实现文件为 lib/index.ts。第一步收集连接参数建立连接前需要准备三个信息参数说明是否必须API token在 Baserow 账户/实例中生成的 API 令牌用于请求鉴权必须Host选择托管方式Baserow Cloud官方云服务或Self Hosted自托管实例必须Base URL仅在 Host 选择 Self Hosted 时出现填写自托管 Baserow 的基础地址自托管时必填其中 API token 的获取在 manifest.json 中被定义为encrypted: true意味着保存后 ToolJet 会以加密方式存储该令牌同时清单的required数组也把api_token标记为唯一强校验项——即使 Host 切换到 Baserow Cloudtoken 依然不可缺少。第二步在 ToolJet 中添加 Baserow 数据源添加入口有两种任选其一点击查询面板上的 Add new Data source按钮通过 ToolJet 仪表盘进入Data Sources数据源管理页面点击右上角新增。在配置表单中依次填写上文三个参数。Host 下拉框提供两个选项其值与底层请求地址的映射关系定义在插件源码中见 lib/index.ts#L16-L23const apiToken sourceOptions.api_token; const host sourceOptions.baserow_host; const baseURL host baserow_cloud ? https://api.baserow.io : sourceOptions.base_url;即选择 Baserow Cloud 时Base URL 会被固定为https://api.baserow.io无需也无法手动填写选择 Self Hosted 时才需要提供 Base URL对应 manifest 中self_hosted.base_url字段如https://baserow.example.com。所有对 Baserow 的请求最终都拼接在这个 base URL 之上。配置完成后点击Save即可在数据源列表看到baserow条目可点击测试连接验证参数正确性。第三步发起一条 Baserow 查询在应用编辑器中执行以下四个步骤点击编辑器底部查询管理器中的 Add按钮数据源Data Source选择上一步添加的Baserow在Operation下拉框选择要执行的操作并填写其参数点击Preview预览输出或点击Run真正触发查询。工具集 UI 支持的操作清单定义在 operations.json 中与文档列出的七种操作一一对应。operations.json中每个参数输入框类型均为codehinterToolJet 代码提示输入框因此可以推断参数位置支持书写 ToolJet 表达式或从其他组件读取动态值而不必硬编码。支持的七种操作详解每种操作与真实 Baserow REST API 的映射关系可直接从插件运行时 lib/index.ts 的switch (operation)分支中核对。下表为总览操作HTTP 方法请求路径相对 Base URL需要参数List fieldsGET/api/database/fields/table/{table_id}/?user_field_namestrueTable IDList rowsGET/api/database/rows/table/{table_id}/?user_field_namestrueTable IDGet rowGET/api/database/rows/table/{table_id}/{row_id}/?user_field_namestrueTable ID、Row IDCreate rowPOST/api/database/rows/table/{table_id}/?user_field_namestrueTable ID、RecordsUpdate rowPATCH/api/database/rows/table/{table_id}/{row_id}/?user_field_namestrueTable ID、Row ID、RecordsMove rowPATCH/api/database/rows/table/{table_id}/{row_id}/move/?user_field_namestruebefore_id{before_id}Table ID、Row ID、Before ID可选Delete rowDELETE/api/database/rows/table/{table_id}/{row_id}Table ID、Row ID说明所有行/字段读取请求都携带user_field_namestrue查询参数它让 Baserow 在响应中返回字段名如Name而非字段内部 id这正是响应示例中键名为人类可读字段名的原因。List Fields列出字段返回一个表中的全部字段列定义。必填参数Table ID从 lib/index.ts#L37-L45 可见其实际请求为GET {baseURL}/api/database/fields/table/{tableId}/?user_field_namestrue。响应示例[ { id: 331156, table_id: 57209, name: Name, order: 0, type: text, primary: true, text_default: }, { id: 331157, table_id: 57209, name: Last name, order: 1, type: text, primary: false, text_default: }, { id: 331158, table_id: 57209, name: Notes, order: 2, type: long_text, primary: false }, { id: 331159, table_id: 57209, name: Active, order: 3, type: boolean, primary: false } ]每个字段对象包含字段 id、所属表 id、字段名、排序位置、字段类型text/long_text/boolean等以及是否为主字段等信息。List Rows列出行返回一个表中的全部数据行分页结构。必填参数Table ID底层请求为GET {baseURL}/api/database/rows/table/{tableId}/?user_field_namestrue见 lib/index.ts#L27-L35。响应示例{ count: 3, next: null, previous: null, results: [ { id: 2, order: 0.99999999999999999991, Name: Bill, Last name: Gates, Notes: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce dignissim, urna eget rutrum sollicitudin, sapien diam interdum nisi, quis malesuada nibh eros a est., Active: false }, { id: 3, order: 0.99999999999999999992, Name: Mark, Last name: Zuckerberg, Notes: null, Active: true }, { id: 1, order: 0.99999999999999999997, Name: Elon, Last name: Musk, Notes: null, Active: true } ] }顶层count表示总行数next/previous为分页游标results为当前页数据。配合 ToolJet 的表格组件展示时通常可直接取data.results绑定为表格数据。Get Row获取单行按行 id 获取表中某一行。必填参数Table ID、Row ID底层请求为GET {baseURL}/api/database/rows/table/{tableId}/{row_id}/?user_field_namestrue见 lib/index.ts#L47-L56。响应示例{ id: 1, order: 0.99999999999999999997, Name: Elon, Last name: Musk, Notes: null, Active: true }Create Row新建行向表中插入一行数据。必填参数Table ID、RecordsRecords 示例字段名与字段值组成的 JSON 对象{ Name: Test, Last name: Test Name, Notes: Test Note, Active: true }底层请求为POST {baseURL}/api/database/rows/table/{tableId}/?user_field_namestrue并将 Records 内容作为请求体json提交见 lib/index.ts#L58-L67。Records 在 UI 中是一块 150px 高的多行编辑区见 operations.json 中create_row.body定义并提示占位符{ fieldName: Value }。值得注意的是运行时使用JSON5.parse解析该文本因此书写时比标准 JSON 更宽松允许不加引号的键、尾随逗号、单引号等。响应示例返回新建行的完整数据含自动分配的行 id{ id: 19, order: 0.99999999999999999996, Name: Test, Last name: Test Name, Notes: Test Note, Active: true }Update Row更新行按行 id 局部更新一行Records 中只写需要修改的字段即可。必填参数Table ID、Row ID、RecordsRecords 示例{ Name: Test, Last name: Test Name, Notes: Test Note, Active: true }底层使用 HTTPPATCH语义调用PATCH {baseURL}/api/database/rows/table/{tableId}/{row_id}/?user_field_namestrue见 lib/index.ts#L69-L79。响应示例{ id: 19, order: 0.99999999999999999996, Name: Test, Last name: Test Name, Notes: Test Note, Active: true }Move Row移动行调整某一行在表中的顺序位置。必填参数Table ID、Row ID可选参数Before ID—— 将目标行移动到该 id 所代表的行之前若未提供目标行将被移动至表尾。底层请求为PATCH {baseURL}/api/database/rows/table/{tableId}/{row_id}/move/?user_field_namestruebefore_id{before_id}见 lib/index.ts#L81-L94。before_id以查询字符串方式传入移动的本质是重写行的order值。响应示例注意order已更新为新的排序值{ id: 3, order: 2.00000000000000000000, Name: Mark, Last name: Zuckerburg, Notes: null, Active: true }Delete Row删除行按行 id 从表中删除一行。必填参数Table ID、Row ID底层请求为DELETE {baseURL}/api/database/rows/table/{tableId}/{row_id}见 lib/index.ts#L96-L107。删除请求不带user_field_names参数属于纯副作用操作。删除结果取决于 Baserow 返回的状态当 HTTP 状态码为204 No Content时视为成功查询结果为空对象{}否则抛出错误界面显示执行失败。底层鉴权与错误处理机制从插件源码可以进一步理解连接与运行时的内部约定鉴权方式插件通过authHeader构造请求头Authorization: Token api_token并统一携带Content-Type: application/json见 lib/index.ts#L7-L9。这是 Baserow 官方推荐的 Token 鉴权方案token 本身在数据源配置中按加密字段保存。响应封装所有成功的查询统一返回形如{ status: ok, data: result }的结构见 lib/index.ts#L113-L116data即上文的各操作响应对象。异常处理任何请求异常都会被捕获并包装为QueryError(Query could not be completed, error.message, {})抛出见 lib/index.ts#L109-L112ToolJet 侧会据此把查询标记为失败并展示错误信息。常见的失败原因包括token 无效401、Table ID 不存在404、字段名拼写与表结构不符导致请求体非法400等。输入类型插件以 TypeScript 类型约束参数——SourceOptions声明api_token、baserow_host、base_urlQueryOptions声明operation、table_id、row_id、before_id、body可查阅 types.ts。实战组合建议列表 详情先用 List Rows 拿到results绑定表格组件再让表格行的点击事件触发一个 Get Row 查询Row ID 用表达式取自selectedRow.id即可实现“点击行查看详情”。表单入库在新建/编辑页面中用 Create Row / Update Row 把表单组件的值组装成 Records 对象提交提交成功后可用返回的id继续后续流程如跳转、刷新列表。拖拽排序类界面若业务需要重排行序可通过 Move Row 配合目标行 id 实现不传 Before ID 时行会沉到表尾。清洗/删除Delete Row 适合对接“确认删除”类交互由于删除返回空对象可依据查询是否成功status而非响应内容来判断结果。小结本文基于 docs/docs/data-sources/baserow.md 完整梳理了 ToolJet 连接 Baserow 的配置要素与全部七种行级操作并结合 lib/index.ts、manifest.json 与 operations.json 澄清了 Cloud/自托管两种 Host 的 Base URL 逻辑、Token 鉴权头、JSON5 Records 解析、PATCH/DELETE 语义以及 204 成功判定等实现细节。照此配置即可在 ToolJet 中把 Baserow 当作可读写、可排序的后端数据库驱动各类内部工具页面。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考