No Server Code Application(无服务端编程服务推荐)
写的文章太偏总是没人看,对大家其实帮助也不大,所以写点实用的吧,我相信此文介绍的服务是很多前端开发的痛点,应该也有不少人想象过这样的服务,但是可能因为方法或者其他原因,没有找到适合的服务,今天我就介绍两个比较成熟的,甚至可以在生产环境使用的无服务端编程服务。
问题
一句话总结,就是
有没有一个方案,可以简单的部署,然后不需要做任何的服务端开发,即可由前端开发从 JS 端直接向数据库做较为复杂的增删改查?
其实之前我在知乎上看到过这个问题,很多人其实会觉得这个是异想天开,这个问题背后有很多问题,例如:如何做复杂的查询(联合、分组等)?如何实现业务逻辑?如何分发事件给其他系统?如何保障安全(注入、权限等)?
不过,想过这个问题的前端不止你一个,其实不止是前端,服务端同学也非常痛恨增删改查,从很早,服务端框架中就内置各种 crud 脚手架,不过脚手架还是脚手架,还没有达到完全的”无代码“,对前端同学来说总是有成本的。
今天,我们就推荐两个服务,请各取所需。
传统的无服务代码
首先介绍一个思路比较传统的小服务,可能不能很好的使用于生产环境,支持的功能也有限,但是对于想快速开发一个demo,且没有元数据管理等诉求的同学,也不失是一个简单粗暴的解决方案,你只要给他喂一个数据库,他就可以暴露出各种 api 来。
不过这个小服务也有一些问题: 1. 安全方面,不是很能保障。 2. 查询条件的构建,有些麻烦,不如下一个方案方便。 3. 查询有一些隐含的限制,例如查询条数限制在1W以内,而且不可配置。 4. 分组汇总等能力有限,无法叠加其他字段计算。
讲一下优势:
- 这个库大概有4300个star,相对来说还是比较热门的。
- 使用 nodejs 开发,安装非常简单,没有特别的依赖,这个算是一个优势。
- 支持单体、列表等查询,支持分组、关联表等。
- 支持直接输出某些图表需要的数据结构,并且可以自动生成x轴的分组等。
具体的功能大家可以去github直接查看,安装和配置也非常简单,基本不需要任何服务端和服务器运维经验。
Hasura,Instant GraphQL for all your data
这是第二个服务的标语,这是我在调研 GraphQL 相关生态后,我认为对 data to graphql 封装最彻底的服务,完全实现了三无:
- 无代码元数据管理
- 无代码增删改查
- 无代码逻辑串联
- 无代码事件分发
同时,他有些特别的优势:
- 使用 graphql,社区流行的标准前端查询语法
- 支持各种数据源、支持地理查询等各种查询姿势
- 非常强大的可视化查询构建器,前端查询代码基本也不需要手写
简单介绍一下
查询构建器
这是我最看重的功能,虽然 graphql 官方就是有查询构建器的,但是其实没这么强大,hasura 是做了很多代码层面的封装,才实现了诸多类型的查询组合,直接上图:
这里是一张表,里面有地理信息,整个查询,通过左侧点一点,就可以构建出各种查询(以及删除、增加、更新等操作语法),我其实深深理解构建通用查询接口的参数有多么痛苦,所以这个 Query Builder 对我来说是莫大的福音。
Hasura 是个比较庞大的服务,他的部署是通过 docker 来部署的,所以需要你的服务器或者电脑,有 docker 和 docker-compose 的环境,然后部署就变的特别简单了,一个命令即可搞定。
安装后,启动服务,即可利用你配置的数据库信息自动生成所有表的 scheme 信息,及相应的增删改查方法,然后使用 query builder 构建你的请求即可,无需做任何代码的开发。
另外 hasura 支持一些围绕元数据的其他功能,例如多表组合(通过数据库的view实现),例如 Actions,用来编排和串联多个服务、内外服务、数据接口的,还有 Events,用来做数据的变更通知等。另外,hasura 也支持一些代码层面的使用方式,拥有一些脚手架命令可以自动生成 scheme 等,也可以自己写代码去使用 engine 和 scheme 等。
目前 hasura 的所有功能都支持 postgres 数据库,另外也有支持 mysql 的 beta 版,mysql版没有很多高级功能,但是基本的 query builder 和增删改查是完整的。
官方文档: Hasura GraphQL Engine Documentation | Hasura GraphQL Docs
Github 项目: https:// github.com/hasura/graph ql-engine/
mysql 版: MySQL preview | Hasura GraphQL Docs