nocoDB (https://www.nocodb.com/)是最近开源[1]的无代码编程应用,作为Airtable的开源免费替代品,可以用来快速构建企业的后台信息系统。
类似的产品有Google的AppSheet和亚马逊的AWS Honeycode。不仅按人头收费,而且会带来深度的平台绑定。nocoDB作为开源产品个人认为很有潜力
基本功能
nocoDB本质上是一个基于关系型数据库的在线Excel
它虽然功能上比Excel弱很多,但是能够通过关系型数据库,满足许多协作场景的需要,比如数据权限控制、数据同步、审计,如下图所示:
然而截至目前(2021年8月),大部分的高级还未完成,可用性比较低。
通用API
考虑到大部分系统的后台主要工作就是进行数据的增删查改,nocoDB实现了一个通用API可以让任何三方系统对接数据库
这个通用后台提供了所有数据模型(表)的所有基本操作,用户在创建项目时可以任选GraphQL或RESTFul之一作为接口框架,并提供了完整的、自动生成的接口说明文档:
此外nocodb也提供了完整的API Token 管理系统,实现API的权限控制
系统架构
- nocoDB 全部基于 nodejs开发,前端使用的是vue框架,后端(即通用API)使用express,所有模块都在同一个repo中实现;
- nocoDB使用knex进行所有的数据库连接,所以基本支持所有的数据库;
- nocoDB自己需要一个独立的数据库(也叫做「根数据库」)存储元数据(metadata),这个在系统初始化时创建,包如下表格:
- 系统初始化之后可以创建对外的三方数据库连接
部署
整个系统设计成了无状态的模式,所有需要存储的信息都保存在外部数据库里,所以nocodb可以非常轻易的部署在大部分环境里而不用考虑状态依赖。
官方推荐使用docker方式运行,部署在Heroku上
实测使用Google Cloud Run也能轻松部署,没有任何问题。但是需要注意几个坑:
- Nocodb的根数据库需要通过环境变量NC_DB配置
- 如果根数据库连接需要SSL加密,最好使用环境变量进行配置,例如PostgreSQL的PGSSL环境变量;此外如果密码包含特殊字符,也最好使用环境变量提供,例如PostgreSQL的PGPASSWORD,这些都是knex.js的坑
- Nocodb会与数据库建立大量连接,对数据库并发性能有一定要求(至少入门版的Google Cloud SQL撑不住)
结论
- Nocodb还处于非常早期阶段,可用性较低,bug非常多,不适合进入生产环境
- 未来完善后,可以作为小型企业的内部信息系统使用,可以节省不少内部系统开发的成本
- 目前主流成熟的网站框架其实都有提供类似功能的模块,比如Flask-admin,Django-admin,虽然界面丑陋点,功能和稳定性还是很优秀的
暂时无法编辑用户组权限,比如设置只能看到用户自己创建的条目