Rocket-API 的前世今生

2020年11月21日

在这里插入图片描述
大家好,我是一名资深搬砖工程师,常常忙碌于增查删改中,无法自拔。

我曾:

经历过APIJSON的暧昧

经历过GraphQL的诱惑

经历过DataWay的熏陶

后得大师点醒,为什么不直接搞SQL呢

为什么不直接搞SQL呢…
为什么不直接搞SQL呢…
为什么不直接搞SQL呢…

这来自灵魂的三大暴击,一下子打动了我

那就搞一个? 那就搞一个!

https://gitee.com/alenfive/rocket-api

第一版本

画了个页面,可以在里面写SQL,有点像BI系统,写SQL生成报表。只不过这里的输入是http请求的参数,输出的是数据库查询结果,将SQL保存到数据库里,就像这样:

  1. 配置一下请求方式
  2. 配置一下访问路径
  3. 再写个SQL

在这里插入图片描述

select * from user where id = #{id}

好了,一个接口就这样搞定,保存,试一下 (话外音:这不是一门正经的语言,不用重启)

curl http://localhost:8080/test/fast?id=2

 

[
	{
		"phone": "15828865111",
		"createTime": "2020-05-29 15:44:23",
		"name": "更新",
		"updateTime": "2020-06-24 15:43:06",
		"id": 2
	}
]

第二版本

后来又得大师提点,说,唉,数据不用处理的吗,虽然CURD简单,但,还是有点逻辑的好吧。

刚好,JDK1.8有个新成员 ScriptEngineManager 脚本引擎,他跟Javascript,Python,Ruby,Groovy等等很多语言都有扯不清的关系。挑了一位里面最好的一门语言 “Groovy”(是世界上最好的语言),来解析数据处理逻辑

好了,现在有数据,有逻辑了:

在这里插入图片描述

sql = """sql
select * from user where id = #{id}
"""
user = db.findOne(sql)

user.name = "我是杀手"

return user

保存,再试一下(话外音:Groovy是一门正经的语言,同时也是一门动态编译语言,所以依然不用重启):

curl http://localhost:8080/test/fast?id=2

 

{
	"phone": "15828865111",
	"createTime": "2020-05-29 15:44:23",
	"name": "我是杀手",
	"updateTime": "2020-06-24 15:43:06",
	"id": 2
}

第三版本

后来又得大师提点,说,springboot 是人们的挚爱亲朋,虽然你长得不错,但又有谁会舍得她呢,我虽然常常CURD,但偶尔也有复杂需求的啊,IDEA这么好,复杂的需求,我可是会寸步难行的

有道理!

那能否做到互不影响,相互独立,又能一起共事呢,我知道,他这是想脚踏两只船了,好在springboot 还很开放,早有心里准备

        <dependency>
            <groupId>com.github.alenfive</groupId>
            <artifactId>rocket-api-boot-starter</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>

在这里插入图片描述

https://gitee.com/alenfive/rocket-api

展开阅读全文
13 收藏
分享
加载中
精彩评论
嗯,和我想法类似,不光要提供给前端手写SQL的能力,还必须要有一门语言来处理业务,我是直接用Java,参见GoSqlGo项目。从生态来说,个人认为Java要比Groovy、Typescript 等语言强一些。
2020-11-22 09:58
2
举报
最新评论 (9)
如果是给前端用的:
1、你需要 前端去学 sql;
2、sql 直接写你不怕注入吗?直接暴露后端库表,你怕死的不够快啊?
3、你以为前后端取数就只对应库表操作吗?鉴权呢?缓存呢?分流呢?熔断呢?
2020-11-22 13:30
0
回复
举报
这个有两种方案,一种是只开放有限的功能,如GraphQL/APIJSON这种,通过配置角色、表格、字段、有限开放的语法,不可能越界防问到其它表格和字段。一种就是我的GoSqlGo方案,有无限的权限,但是在发布时用一个打包工具把前端的Java源码和SQL移回到后端,鉴权、缓存、分流,防SQL注入都在Java源码里做。
2020-11-22 14:14
0
回复
举报
后端用的,前端无法感知
2020-11-23 09:12
0
回复
举报
嗯,和我想法类似,不光要提供给前端手写SQL的能力,还必须要有一门语言来处理业务,我是直接用Java,参见GoSqlGo项目。从生态来说,个人认为Java要比Groovy、Typescript 等语言强一些。
2020-11-22 09:58
2
回复
举报
1。纠正一下,这个项目是给后端同学用的,前端能看到的是提供给他们的http接口文档,按照前后端分离逻辑,前端并不用清楚后端用的是什么框架和技术
2。Groovy是一个jvm语言,定位于比java级别更高,也因此性能比java低。但好在数据处理的语法上,写起来更简单一样。还有一个好处是可以把java代码复制到Groovy里运行(如何不熟悉groovy语法的话)
3。Java是世界上最好的语言
2020-11-22 12:40
0
回复
举报
给后端用? 后端放着现成的Java/MyBatis/Hibernate不用,用Groovy来写业务逻辑和操作数据库? 略复杂一点的查询,你用Groovy实现不了,是不是又会用回到Java呢? 这样还不如直接用Java
2020-11-22 13:34
0
回复
举报
1.复杂的逻辑groovy是可以完成的,他是一门完整的语言
2.可以调用原有项目中java定义的类,方法,或者springboot bean对象
3.这确实不是一个解决所有需求的方案,只是为了业务开发层面的需求能够快速落地,(线上调试,不用重启,数据库操作,分页查询,文件上传,下载,图片预览,我能够做到一分钟内开发+测试+提测)
2020-11-23 09:11
0
回复
举报
一分钟内开发完成后,你这些Groovy为了不浪费,是要保留在项目中的,也就是说在发布之后,后端采用的是Groovy+Java混编两种语言。这个是一种选择,无可厚非。先不说Groovy+Java是否比用纯Java开发速度更快,我觉得主要问题是你没解决痛点问题,就是前后端分离造成的沟通成本。GraphQL/APIJSON的目的是前端直接把简单的CRUD活给gan了,不需要后端参与,你是否得考虑一下把你这个工具推广给前端用?即然你号称一分钟开发完成,前端用了你的工具当然也能一分钟开发完成,何必再绕个弯子向后端要API?
2020-11-23 10:15
0
回复
举报
哈哈,我遇到的前端都不会写SQL
2020-11-23 10:58
0
回复
举报
更多评论
9 评论
13 收藏
分享
返回顶部
顶部