这篇文章本来是为技术交流搜集的一些资料. 不过目前在Bing上搜索"amis postgrest", 已经可以在首页看到这篇文章, 看来这个方向目前还没有人公开在做, 因此也想着至少把自己的思路介绍一下.
其实关于降低开发成本, 业界一直有不少尝试, 甚至如果从更大的历史背景看, 人所创造的各种口诀, 速记符号, 都是为了简化重复工作, 提高效率. 在计算机发展历史上人们也一直在探索, 但是在计算机和网络越来越成为基础设施的今天, 这一需求更为迫切, 也有了很多新的条件去解决. 由于技术的进步, 现在的网络条件和计算能力是历史上最好的. 所以低代码和无服务的概念变得越来越广为人知. 然而从实践的角度看, 还没有找到较为完善的综合解决方案.
lowcode & serveless
awesome-lowcode: 国内低代码平台从业者交流 (gitee.com)
这是国内爱好者收集的列表, 众多选择的背后, 是大家也都是在探索中, 整体没有形成清晰的思路和规范.
从开发的角度讲, Web开发一般分为前端和后端, 前端如果不考虑图形化拖拽的场景, 让开发者能够专注业务, 快速生成产品的主要是一些封装较为完善的高层组件. 比如 Baidu Amis, d2-crud-plus Avue 这些库比一般的UI组件库更贴近实际业务场景, 在不是太多要求自定义的场景下, 可以减少样板代码, 避免低级错误. 当然, 实际使用体验取决于设计和实现质量, 目前看来, Amis是能见到的最佳实现.
而后端主要是生产Api供前端调用. 问题是前后端接口api没有形成统一的规范格式,
这个列表来自React Admin项目的文档, 设计时考虑了用适配层统一抽象各种后端接口格式. 从这里也可以看出后端的接口格式多么丰富. 但是这对于开发来说却不是好事. 并且多数接口都是需要手工实现的. 约定都没有统一, 实现更是各种各样. 所以会有人想做统一的接口格式.
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一样方便友好的开发体验.