低代码及无服务平台

354 阅读4分钟

这篇文章本来是为技术交流搜集的一些资料. 不过目前在Bing上搜索"amis postgrest", 已经可以在首页看到这篇文章, 看来这个方向目前还没有人公开在做, 因此也想着至少把自己的思路介绍一下.

其实关于降低开发成本, 业界一直有不少尝试, 甚至如果从更大的历史背景看, 人所创造的各种口诀, 速记符号, 都是为了简化重复工作, 提高效率. 在计算机发展历史上人们也一直在探索, 但是在计算机和网络越来越成为基础设施的今天, 这一需求更为迫切, 也有了很多新的条件去解决. 由于技术的进步, 现在的网络条件和计算能力是历史上最好的. 所以低代码和无服务的概念变得越来越广为人知. 然而从实践的角度看, 还没有找到较为完善的综合解决方案.

lowcode & serveless

awesome-lowcode: 国内低代码平台从业者交流 (gitee.com)

这是国内爱好者收集的列表, 众多选择的背后, 是大家也都是在探索中, 整体没有形成清晰的思路和规范.

从开发的角度讲, Web开发一般分为前端和后端, 前端如果不考虑图形化拖拽的场景, 让开发者能够专注业务, 快速生成产品的主要是一些封装较为完善的高层组件. 比如 Baidu Amis, d2-crud-plus Avue 这些库比一般的UI组件库更贴近实际业务场景, 在不是太多要求自定义的场景下, 可以减少样板代码, 避免低级错误. 当然, 实际使用体验取决于设计和实现质量, 目前看来, Amis是能见到的最佳实现.

而后端主要是生产Api供前端调用. 问题是前后端接口api没有形成统一的规范格式, 1640829985380_D4916EC4-9729-4a57-88EC-AF9B53CC3845.png

1640830053540_7D28130E-4897-4dbe-9EB4-4A2CD59BB6A7.png

这个列表来自React Admin项目的文档, 设计时考虑了用适配层统一抽象各种后端接口格式. 从这里也可以看出后端的接口格式多么丰富. 但是这对于开发来说却不是好事. 并且多数接口都是需要手工实现的. 约定都没有统一, 实现更是各种各样. 所以会有人想做统一的接口格式.

Web capture_30-12-2021_10313_github.com.jpeg

github上也有人收集了列表, 关于统一的api接口, 可以看到仍然有这么多尝试和选择. 目前我所见到的较为成熟完善的有这几种.

apijson, PostgREST, graphql, 云函数

其中apijson是国人自己创造实现的, 目前据说在腾讯的业务中得到了应用. graphQL是国外设计实现的, 国外用户较多. 云函数目前是和厂商绑定的, 尚未形成统一标准. 个人感觉目前开源且完善的当属PostgREST. 这个项目已经稳步迭代多年, 国外也有生产环境使用的案例. 接口定义较为清晰简明, 也是我目前能找到的最佳实现.

因此, 把这两个项目结合起来, 形成前后端完整的低代码开源解决方案, 是我的一个主要努力方向. 主要的工作量还是转换接口数据格式. 目前的工作成果在uweb, 仍然没有足够完善.

PostgREST也提供了数据元信息的接口Tables and Views — openapi-support, 因此理论上可以根据元信息生成页面所需要的配置数据, 进一步减小开发工作量.

现在的实现还没有考虑鉴权. 等到基础的数据格式处理的差不多了, 计划参考layui-mini的单页版, 放一个登录页面和接口, 登录后跳转业务页面. 至于更细粒度的内部权限管理, 计划使用OpenResty或者Deno.js等类似的技术, 在网关层用动态语言做一些过滤判断.

其实PostgREST本身是提供了鉴权方案的, 详细用法可以查看官方文档Overview of Role System. 这种方案的思路是使用数据库本身的权限系统, 因此需要了解数据库的很多知识, 感觉对用户不是十分友好. 因此考虑参照apijson的思路, 在数据库中存储规范化的权限数据, 在外部使用程序对权限进行判断.

关于项目的分发形式, 也准备参考PHP的成功经验, 组装成WNPP之类的安装包, 希望在充分利用机器性能的同时, 仍然能够保持像PHP一样方便友好的开发体验.