nocodb API开发指南:RESTful接口与SDK使用详解
一、API基础与环境准备
nocodb作为开源的Airtable替代品,提供了完整的RESTful API接口和SDK支持,允许开发者通过编程方式操作数据库。本文将详细介绍如何使用nocodb的API和SDK进行开发,包括接口调用、数据操作和最佳实践。
1.1 安装与启动
nocodb支持多种安装方式,推荐使用Docker快速启动:
docker run -d \
--name noco \
-v "$(pwd)"/nocodb:/usr/app/data/ \
-p 8080:8080 \
nocodb/nocodb:latest
启动后访问http://localhost:8080/dashboard即可进入管理界面。更多安装方式可参考README.md。
1.2 API认证
nocodb API使用JWT令牌进行认证,获取方式如下:
- 通过登录接口获取令牌:
POST /api/v1/auth/user/signin
Content-Type: application/json
{
"email": "user@example.com",
"password": "password"
}
- 响应包含访问令牌,后续请求需在Header中携带:
Authorization: Bearer <token>
二、RESTful API核心接口
2.1 数据操作接口
nocodb提供完整的CRUD操作接口,以下是主要端点:
2.1.1 列出记录
GET /api/v1/db/data/v1/{workspaceId}/{baseId}/{tableId}
响应格式:
{
"records": [
{
"id": 1,
"fields": {
"title": "示例记录",
"status": "active"
}
}
],
"next": null,
"prev": null
}
2.1.2 创建记录
POST /api/v1/db/data/v1/{workspaceId}/{baseId}/{tableId}
Content-Type: application/json
{
"fields": {
"title": "新记录",
"status": "draft"
}
}
2.1.3 更新记录
PATCH /api/v1/db/data/v1/{workspaceId}/{baseId}/{tableId}/{recordId}
Content-Type: application/json
{
"fields": {
"status": "completed"
}
}
2.1.4 删除记录
DELETE /api/v1/db/data/v1/{workspaceId}/{baseId}/{tableId}/{recordId}
2.2 接口权限控制
API权限基于工作区角色,主要角色包括:
workspace-level-owner:完全权限workspace-level-editor:可编辑数据workspace-level-viewer:只读权限
权限定义可参考packages/nocodb-sdk/src/lib/Api.ts中的WorkspaceRolesV3Type枚举。
三、Node.js SDK使用指南
3.1 SDK安装
npm install nocodb-sdk
3.2 初始化客户端
import { Api } from 'nocodb-sdk';
const api = new Api({
baseURL: 'http://localhost:8080/api/v1',
headers: {
'Authorization': 'Bearer <token>'
}
});
3.3 数据操作示例
3.3.1 查询记录
const response = await api.dbData.listRecords({
workspaceId: 'ws_123',
baseId: 'base_456',
tableId: 'tbl_789',
params: {
limit: 10,
offset: 0
}
});
console.log(response.records);
3.3.2 创建记录
const response = await api.dbData.insertRecord({
workspaceId: 'ws_123',
baseId: 'base_456',
tableId: 'tbl_789',
data: {
fields: {
title: 'SDK创建的记录',
value: 100
}
}
});
console.log(response.records[0].id);
3.3.3 批量更新记录
await api.dbData.updateRecords({
workspaceId: 'ws_123',
baseId: 'base_456',
tableId: 'tbl_789',
data: {
records: [
{ id: 1, fields: { status: 'processing' } },
{ id: 2, fields: { status: 'processing' } }
]
}
});
3.4 高级功能:数据聚合
SDK提供数据聚合功能,支持求和、平均值等计算:
// 获取数值列的统计信息
import { getAvailableRollupForColumn } from 'nocodb-sdk/lib/helperFunctions';
const stats = getAvailableRollupForColumn({
uidt: 'Number', // 字段类型
colOptions: { precision: 2 }
});
console.log(stats); // ['sum', 'count', 'min', 'max', 'avg']
详细实现可参考packages/nocodb-sdk/src/lib/helperFunctions.ts。
四、常见问题与最佳实践
4.1 错误处理
API错误响应格式统一为:
{
"code": "ERROR_CODE",
"message": "错误描述"
}
常见错误码包括:
RECORD_NOT_FOUND:记录不存在PERMISSION_DENIED:权限不足VALIDATION_ERROR:数据验证失败
处理示例:
try {
await api.dbData.getRecord(params);
} catch (error) {
if (error.response?.data?.code === 'RECORD_NOT_FOUND') {
console.log('记录不存在');
}
}
4.2 性能优化建议
- 批量操作:使用批量接口减少请求次数
- 字段过滤:只请求需要的字段,减少数据传输
- 分页查询:使用
limit和offset参数实现分页 - 索引优化:为频繁查询的字段创建索引
4.3 安全最佳实践
- 令牌管理:避免硬编码令牌,使用环境变量存储
- 最小权限:为API用户分配最小必要权限
- HTTPS:生产环境必须使用HTTPS加密传输
- 输入验证:严格验证所有API输入数据
五、API文档与资源
5.1 官方文档
- 完整API文档:访问
http://localhost:8080/api/v1/swagger-ui.html - SDK源码:packages/nocodb-sdk/src/lib
5.2 社区资源
- GitHub仓库:nocodb/nocodb
- 问题跟踪:GitHub Issues
- 社区讨论:Discord
通过本文介绍的RESTful API和SDK,开发者可以轻松将nocodb集成到各种应用中,实现数据的程序化管理。建议结合实际项目需求,参考SDK源码中的类型定义和示例代码进行开发。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



