不用写代码 APIJSON 3.5K Star 超第 2 大 ORM 库 Hibernate

2018-11-14 10:54:07 +08:00
 TommyLemon

https://www.timqian.com/star-history/#TommyLemon/APIJSON&hibernate/hibernate-orm

众所周知,Hibernate 是 Java 的第 2 大开源 ORM 库,从 2007 年开源到现在已经有近 12 年的历史。
廉颇老矣,尚能饭否? 长江后浪推前浪,一代新库换旧库。

为什么 APIJSON 从 2016 年 11 月开源后短短 2 年就超过它了呢?
因为 APIJSON 是自动化的,后端不用写代码,就能自动解析前端传的 JSON 参数,
自动转为 SQL 语句并连接数据库执行,然后返回对应的 JSON 结果,
期间自动校验权限、数据、结构,自动防 SQL 注入。

对于前端

对于后端

多表关联查询、结构自由组合、多个测试账号、一键共享测试用例

自动生成封装请求 JSON 的 Android 与 iOS 代码、一键下载自动生成的 JavaBean

自动保存请求记录、自动生成接口文档

一键自动接口回归测试,不需要写任何代码(注解、注释等全都不要)

目前 APIJSON 的生态已初具雏形:

* APIJSON 接口工具:      https://github.com/TommyLemon/APIJSONAuto
* APIJSON -Java 版:      https://github.com/TommyLemon/APIJSON
* APIJSON - C# 版:      https://github.com/liaozb/APIJSON.NET
* APIJSON - PHP 版:      https://github.com/orchie/apijson
* APIJSON -Node 版:      https://github.com/TEsTsLA/apijson

创作不易,GitHub 右上角点 ⭐Star 支持下吧,谢谢 ^_^

https://github.com/TommyLemon/APIJSON

8812 次点击
所在节点    开源软件
73 条回复
wzw
2018-11-14 12:01:54 +08:00
没有 python 没有 go
TommyLemon
2018-11-14 12:24:15 +08:00
@wzw Python 版有开发者声称:
"回说的 python 初步完成了 zeromake/restful_model 刚刚把单元测试写好。
json 的表现层完全自定义,都是为了对应 sql。"
有段时间没更新了,不清楚进度怎样。

希望也有热心的开发者实现 APIJSON 的 Go 语言版本哈。

如何实现其它语言的 APIJSON ?
https://github.com/TommyLemon/APIJSON/issues/38
richangfan
2018-11-14 16:37:30 +08:00
后端要完
TommyLemon
2018-11-14 16:53:44 +08:00
@richangfan
不会的,非常复杂的查询( 1 屏以上 SQL )不建议使用 APIJSON 的自动化 API,手写更容易实现以及性能调优。
还有后端也不只是 CRUD 啊,服务监控、微服务、数据分析、个性化推荐 ...
ooonme
2018-11-14 16:59:44 +08:00
这么多 star,可想而知国内互联网小作坊的项目是有多垃圾
TommyLemon
2018-11-14 17:04:31 +08:00
@ooonme Talk is cheap, show me your code.
TommyLemon
2018-11-14 17:05:25 +08:00
@ooonme 这么贬低别人,得先有公开的拿得出手的成就才行
biantaoGG
2018-11-14 17:10:36 +08:00
看到 java 直接运行 jar 包就可以了 我好方.......我是个安卓开发...当年用 spring 写后端的时候还要打成 war 跑在 tomcat 上...现在已经变得那么简单了么...
zpf124
2018-11-14 17:11:59 +08:00
sagaxu
2018-11-14 17:17:12 +08:00
构造查询参数的过程,跟写代码没什么不同,还增加了学习成本。如果业务简单到可以直接丢给前端用,倒是解放了后端,把部分业务代码转移到前端去了。
TommyLemon
2018-11-14 17:19:24 +08:00
@biantaoGG
因为 SpringBoot 让 Java 开发变得很简单,APIJSON Demo 基于 SpringBoot 提供了自动化 API,
又极大地简化了大部分 CRUD 接口的开发,其实是这部分 API 压根就不用后端开发了哈哈。
TommyLemon
2018-11-14 17:44:19 +08:00
@zpf124
Star 在比较大的程度上反映 Repo 在开源社区的受欢迎程度,在同种类库(例如 ORM )间对比很有意义。
Mybatis 目前应该是 Java ORM 库中 Star 最高的,
然而你敢说 Mybatis(2010 年开源) 使用率一定比 Hibernate(2007 年开源) 高?
但 Star 反映的是 Mybatis 在开源社区的确更受欢迎。

至于 Facebook 出的 GraphQL,你拿出来对比只能说明你没有对 它 和 APIJSON 有足够的了解。
从 Star 数量来看,比 APIJSON 多,确实也在开源社区更受欢迎,在 CRUD 上 APIJSON 完爆 GraphQL:

完爆 Facebook/GraphQL,APIJSON 全方位对比解析(一)-基础功能
juejin.im/post/5ae80edd51882567277433cf

完爆 Facebook/GraphQL,APIJSON 全方位对比解析(二)-权限控制
juejin.im/post/5b13cda1f265da6e4a6bcfee

完爆 Facebook/GraphQL,APIJSON 全方位对比解析(三)-表关联查询
juejin.im/entry/5b4ff88f6fb9a04f914a8df5

目前我已知的所有 ORM 开源库,只有 APIJSON 能做到 关系型数据库 自动化 CRUD,
如果有别的,欢迎告诉我,我会认真了解和对比下。

以下项目主页包括 源码、部署与协议文档、视频教程、接口工具等。
创作不易,GitHub 右上角点 ⭐Star 支持下吧,谢谢 ^_^
github。com/TommyLemon/APIJSON
TommyLemon
2018-11-14 17:57:04 +08:00
@sagaxu
不写代码居然和写代码没什么不同,我也是服。
你写了代码,需求变更,是不是得改接口或新增接口?
用 APIJSON 就不需要后端改接口,前端改下 JSON 参数,
就会重新自动生成新的 SQL 语句,满足新的需求。
sagaxu
2018-11-14 18:51:03 +08:00
@TommyLemon 举个例子,需求从根据身高筛选,改为根据体重筛选,是不是有个地方要把身高改成体重?如果连表的条件改了,能不用改代码吗?

再举个例子,业务状态有变更时发个短信通知,好像还是得写代码。

真正用在 db 层面的 crud 上的开发时间比例很低,大部分还是在处理业务逻辑,而不是简单的数据存取。


我把手上项目挨个遍历了一下,发现没有一个能因此减少工作量,才得到区别不大的结论。
TommyLemon
2018-11-14 18:57:43 +08:00
@sagaxu 至于学习成本,哪个库没有学习成本?
只要 带来的好处 明显超过 带来的坏处 + 学习成本 就值得尝试。

为什么要用 APIJSON ?前后端 10 大痛点解析
github。com/TommyLemon/APIJSON/wiki
TommyLemon
2018-11-14 19:07:39 +08:00
@sagaxu
能啊,这就是 APIJSON 相对以前做法的很大优势。
搜索 name 中包含字母 a
{
"User": {
"name~": "a"
}
}
变为 搜索 sex 为 1
{
"User": {
"sex": 1
}
}
以上都是单个对象,可以套一个 []:{} 变成列表
{
"[]": {
"User": {
"sex": 1
}
}
}

发短信通知不属于 CRUD 了,超过了 APIJSON 的应用范围。
但你也可以写一个远程函数,用于发送短信,
然后不需要的就不调用,需要的就调用,
后面如果有需求 从不发 到变为 发送 就不需要后端写代码了。

最后这个也只是你个人的经验,也许是 ERP 项目,也许是金融项目,也许是其它大项目,
但大部分互联网中小型项目还真没有多少复杂的业务逻辑,APIJSON 的自动化 API 就很适用,
而且也能通过远程函数来扩展业务逻辑的实现。

既然你手上的项目是这样,那就不用呗。
不过从第一点来看,你对 APIJSON 没有足够的了解,或许可以再看看。

在线测试
apijson。org
AllOfMe
2018-11-14 22:08:24 +08:00
@ooonme 我倒觉得楼主的这个项目花了不少心思,说小作坊有点过了吧。你是没见过搭建几个 webpack 配置的脚手架就言必称架构的项目了
AllOfMe
2018-11-14 22:10:42 +08:00
楼主原本是后端出身吗?
AllOfMe
2018-11-14 22:13:39 +08:00
我觉得楼主可以更进一步,基于 APIJSON 搭建一个 Crud 构建系统,类似于飞冰那样,可以让你的项目被更多人吸引
TommyLemon
2018-11-14 23:06:01 +08:00
@AllOfMe
感谢。我是 Android 开发出身转 Java 后端开发,最早开源的项目是 Android 快速开发框架 ZBLibrary
https://github.com/TommyLemon/Android-ZBLibrary

这个建议非常好,目前 APIJSON 的自动化权限控制需要静态编码(最少 3 行代码配置每种角色对一张表的 CRUD 权限),
等把这个做成动态获取的(例如存数据库,项目启动时加载并缓存,然后改了配置后可以调接口刷新缓存),
权限也就能动态配置,新增表后也不用写代码再重启服务了,就能实现几乎完全可以在线配置的 SaaS 后端。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/507671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX