APIJSON 3.5.0-3.5.7 更新内容:
新增存储过程 @key():"fun(...)",用法基本和远程函数 key():"fun(...)" 一样;
新增性能分析 @explain 和缓存设置 @cache 两个对象关键词;
新增最大 对象数量、数组数量、嵌套层级等方法,限制请求、过载保护;
新增 PgClass 和 PgAttribute 查 PostgreSQL 的表属性和字段属性;
LEFT JOIN 和 RIGHT JOIN 支持定制子查询外层的 column,group,order,having ;
多方面提升性能;完善和解决 bug 等;代码、文档等其它优化。
具体见 Release 发布版本。
APIJSON 是一种为 API 而生的 JSON 网络传输协议。
为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的 API。
能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。
适合中小型前后端分离的项目,尤其是互联网创业项目和企业自用项目。
多表关联查询、结构自由组合、多个测试账号、一键共享测试用例
自动生成封装请求 JSON 的 Android 与 iOS 代码、一键下载自动生成的 JavaBean
自动保存请求记录、自动生成接口文档,可添加常用请求、快捷查看一键恢复
一键自动接口回归测试,不需要写任何代码(注解、注释等全都不要)
第三方机构对 APIJSON 的代码扫描,测试结果可靠性高达 99.85%
APIJSON 用 SpringBoot 提供了自动化 API,
自动将前端传的 JSON 参数转为 SQL 语句执行并返回结果,
期间自动校验权限、结构、内容,自动防 SQL 注入,
提供自动化的各种 JOIN(INNER, LEFT, RIGHT 等),
还支持多字段排序 order by,多字段分组 group by,聚合函数 having
等几乎所有 MySQL,PostgreSQL,Oracle 的常规功能。
通过自动化 API,前端可以定制任何数据、任何结构!
大部分 HTTP 请求后端再也不用写接口了,更不用写文档了!
前端再也不用和后端沟通接口或文档问题了!再也不会被文档各种错误坑了!
后端再也不用为了兼容旧接口写新版接口和文档了!再也不会被前端随时随地没完没了地烦了!
在线解析
自动生成接口文档,清晰可读永远最新
自动校验与格式化,支持高亮和收展
自动生成各种语言代码,一键下载
自动管理与测试接口用例,一键共享
自动给请求 JSON 加注释,一键切换
对于前端
不用再向后端催接口、求文档
数据和结构完全定制,要啥有啥
看请求知结果,所求即所得
可一次获取任何数据、任何结构
能去除重复数据,节省流量提高速度
对于后端
提供通用接口,大部分 API 不用再写
自动生成文档,不用再编写和维护
自动校验权限、自动管理版本、自动防 SQL 注入
开放 API 无需划分版本,始终保持兼容
支持增删改查、模糊搜索、正则匹配、远程函数等
🏆码云最有价值开源项目 🚀后端接口和文档自动化,前端(客户端) 定制返回 JSON 的数据和结构!
创作不易,GitHub 右上角点 ⭐Star 支持下吧,谢谢^_^
APIJSONAuto 自动化接口管理工具,自动生成文档与注释、自动生成代码、自动化回归测试、自动静态检查等
APIJSON.NET C# 版 APIJSON ,支持 MySQL, PostgreSQL, MS SQL Server, Oracle, SQLite
apijson-php PHP 版 APIJSON,基于 ThinkPHP,支持 MySQL, PostgreSQL, MS SQL Server, Oracle 等
apijson Node.ts 版 APIJSON,支持 MySQL, PostgreSQL, MS SQL Server, Oracle, SQLite, MariaDB, WebSQL
uliweb-apijson Python 版 APIJSON,支持 MySQL, PostgreSQL, MS SQL Server, Oracle, SQLite 等
APIJSON Go 版 APIJSON,功能开发中...
APIJSONKOTLIN Kotlin 版 APIJSON,基础框架搭建中...
APIJSONParser 第三方 APIJSON 解析器,将 JSON 动态解析成 SQL
ApiJsonByJFinal 整合 APIJSON 和 JFinal 的 Demo
SpringServer1.2-APIJSON 智慧党建服务器端,提供 上传 和 下载 文件的接口
APIJSON-Android-RxJava 仿微信朋友圈动态实战项目,ZBLibrary(UI) + APIJSON(HTTP) + RxJava(Data)
Android-ZBLibrary Android MVP快速开发框架,Demo全面,注释详细,使用简单,代码严谨
感谢热心的作者们的贡献,点 ⭐Star 支持下他们吧。
以上是各种语言的 APIJSON 后端库(基本每个都有 Demo,部分有比较详细的文档), 主项目提供: 设计规范(CRUD 请求格式;数组、搜索、JOIN、子查询、性能分析 等各种查询功能,都有 Demo 点击测试), Java 的 ORM 库 APIJSONORM(实现 JSON 对象 -> SQL -> 封装 JSON 返回结果 + 权限、数据、结构校验), Java 的 后端 Demo(APIJSONBoot: SpringBoot, APIJSONFinal: JFinal, APIJSONOracle: Oracle)。
还提供了: Android 客户端 Demo (APIJSONApp + APIJSONTest 两个工程), iOS 客户端 Demo (Swift) , JavaScript 网页前端 Demo(原生+Vue) , Python 的 Demo(可用于 爬数据 调用 Java 或其它 Server 的 API 来持久化存取)。
每个工程根目录都有一个 README.md 展示快速上手的文档。 首页还提供现成的 APIJSONApp.apk, APIJSONTest.apk 下载, 视频教程、在线测试工具、English Document 入口。
https://i.v2ex.co/T272D2Xd.jpeg 还有 已登记使用的 企业或项目、贡献者们、生态内其它项目、推荐博客、码云链接 等等。
1
TommyLemon OP 总共 10617 行代码,16 个「可能」的 bug,24 个改进建议, (1 - bugs/lines) 高达 99.85% 。
可见 APIJSON 代码非常严谨可靠。 |
2
sleshep632 2019-05-29 10:21:16 +08:00 3
第一次见到把“奖状”放到项目主页的...
如果按照这个项目逻辑,前端维护 db 索引吗? |
3
TommyLemon OP @sleshep632 放奖状有啥奇怪的,你去看看 Mybatis-Plus,
再说大部分项目都没有呢,GVP 又不是随便能申请到的。 建表、维护表那都是后端做的事,DB 索引当然也是后端维护, 源码、Demo、文档、视频都提供了,麻烦了解清楚再说,谢谢 |
4
TommyLemon OP |
5
MissThee 2019-05-29 10:48:00 +08:00
之前看过 GraphQL 也是有点儿类似吧,都是前端给一些对象信息,后端根据这些信息组返回值。
暂时还不太喜欢这样的设计,感觉像是让前端写变体的 sql 查询语句一样。 总感觉这种方式怪怪的。想极端点儿,后台直接写一个接口接收原生 sql 语句,返回执行结果,前端学会原生 sql 语句,就可以解放后台了。。。-_- |
6
TommyLemon OP @MissThee 是有些类似,很多人没搞清楚总是说“比你的 APIJSON 强”,“完爆 APIJSON ”之类的。
事实上 Facebook 的 GraphQL 是 Gateway,而 APIJSON 是 ORM,有着本质上的区别, 真要放一般的互联网项目开发中拿来对比,那就是 APIJSON “完爆” GraphQL 了。 https://juejin.im/post/5ae80edd51882567277433cf |
7
TommyLemon OP @MissThee 我很早也考虑过直接传 SQL,而不是搞一个 APIJSON 的轮子。
但解析 SQL 语法,再校验权限、结构、内容,最后再转回 SQL, 不说性能问题,真要这么好搞业内也应该有不错的开源方案了。 而且 SQL 不能直观地反映返回 JSON 的数据结构, APIJSON 就能做到看请求知结果,所求即所得。 APIJSON 的 提取字段、远程函数 功能也不是 SQL 方案能方便地实现的。 还有 自动加注释、自动生成封装请求 JSON 的代码,用 SQL 方案实现也很困难,甚至根本不可能准确地实现。 为什么要用 APIJSON ?或者 APIJSON 有什么用? https://github.com/TommyLemon/APIJSON/wiki |
8
blless 2019-05-29 11:06:25 +08:00 via Android 5
你又来辣…
每次看你刷屏都挺累的,这次说点正经的。虽然看起来确实挺有用,不过我肯定不会用的。 业务核心在于业务抽象跟业务建模。也就是设计业务的时候压根不会考虑接口层如何实现和数据层如何实现。核心业务实现完成后根据需求动态添加接口跟适配数据库。 小项目用用无所谓,大型项目用这种设计必然耦合越来越重,一个业务变更就是死 |
9
anyele 2019-05-29 11:13:35 +08:00 via Android
老哥我来辣
|
10
TommyLemon OP @blless
APIJSON 可以用来大幅降低后端的开发工作量,大部分增删改查都不用写代码,前端直接调用自动化 API。 还可以解决前后端各种扯皮问题,简化开发流程,缩短开发周期。 RESTful,RPC 就不耦合了吗?还不是得适配前端的 UI,前端要微信朋友圈动态这种数据: ```js { "list": [ { "Moment": { "id": 12, "userId": 70793, "date": "2017-02-08 16:06:11.0", "content": "APIJSON,let interfaces and documents go to hell !", "praiseUserIdList": [ 70793, 93793, 82044 ], "pictureList": [ "http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg", "http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg" ] }, "User": { "id": 70793, "name": "Strong", "head": "http://static.oschina.net/uploads/user/585/1170143_50.jpg?t=1390226446000" }, "comemntList": [ { "id": 162, "toId": 0, "userId": 93793, "momentId": 12, "date": "2017-03-06 13:03:45.0", "content": "This is a Content...-162" }, { "id": 164, "toId": 0, "userId": 93793, "momentId": 12, "date": "2017-03-06 13:03:45.0", "content": "This is a Content...-164" } ] }, { "Moment": { "id": 15, "userId": 70793, "date": "2017-02-08 16:06:11.0", "content": "APIJSON is a JSON Transmission Structure Protocol …", "praiseUserIdList": [ 82002, 70793, 38710, 93793 ], "pictureList": [ "http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000", "http://common.cnblogs.com/images/icon_weibo_24.png" ] }, "User": { "id": 70793, "name": "Strong", "head": "http://static.oschina.net/uploads/user/585/1170143_50.jpg?t=1390226446000" }, "comemntList": [ { "id": 176, "toId": 166, "userId": 38710, "momentId": 15, "date": "2017-03-25 20:28:03.0", "content": "thank you" }, { "id": 1490863469638, "toId": 0, "userId": 82002, "momentId": 15, "date": "2017-03-30 16:44:29.0", "content": "Just do it" } ] } ], "code": 200, "msg": "success" } ``` 你提供多个接口: 一个查 Moment 列表, 一个根据 Moment.userId 查 User, 一个根据 Moment.id 查 Comment 列表, 让人家写出回调地狱的代码,嵌套调用,然后写算法把多个接口的数据整合起来? 期间多次的 HTTP 连接,多余的共同数据( code,msg 等外层结构)不是浪费性能和流量? 如果只提供一个,那还不是耦合 UI 了? 前端 UI 一改,例如加上所有点赞的用户列表, 或者评论从单层变为要多层嵌套有上下级关系的,那接口也得跟着改,或者提供新的接口。 APIJSON 起码还能做到后端不用修改或新增接口,前端改下请求 JSON 就能拿到对应新 UI 的数据。 任何一个技术都有适用场景。 APIJSON 是一种为 API 而生的 JSON 网络传输协议。 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的 API。 能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。 适合中小型前后端分离的项目,尤其是互联网创业项目和企业自用项目。 已经把适用场景说清楚了。 |
11
TommyLemon OP @anyele 你好,请多多指教
|
12
broadliyn 2019-05-29 11:38:20 +08:00 27
我觉得 lz 的逻辑特别的搞笑。
可靠率是照 bug 行数来算的:“总共 10617 行代码,16 个「可能」的 bug,24 个改进建议, (1 - bugs/lines) 高达 99.85% 。可见 APIJSON 代码非常严谨可靠。” 普及率不用实际案例来说明,用的是 github 星星比 hibernate 多。 一个前端弄的后端框架好不好我不知道,就看楼主这秒天灭地的语气,表示非常想 diss+屏蔽。 另外放个码云的奖状真是 6 的不行。码云这种榜单前排项目清一色是 spring boot 权限集成管理手脚架的业余平台完全看不出这种奖状有什么价值。玻璃框+打印纸大概成本也就几十块钱吧。 可能楼主就是开源界的罗永浩吧。 |
13
otakustay 2019-05-29 11:46:54 +08:00 1
千行 BUG 率约 1.5,不算什么特别严谨可靠吧……
|
14
allenhu 2019-05-29 12:19:43 +08:00
数据的读写从来不是问题,问题是如果有些字段不允许读,或者读出来后需要经过处理再展示,要怎么做?
|
15
royzxq 2019-05-29 12:30:05 +08:00 6
issues 10 open 69 closed.
stars 5900. issue 都通过 QQ 群解决了? |
16
rrfeng 2019-05-29 12:43:43 +08:00 via Android
智障项目
|
17
blless 2019-05-29 13:01:10 +08:00 via Android
@TommyLemon restful rpc 只是协议,耦不耦合看业务设计,API 设计原则上也是要精确避免歧义跟最小数据…
你这套是数据流从前端直接穿透到后端数据库,耦合程度简直爆炸。而且原本业务开发核心其实是业务模型,到你这核心就变成数据库模型。 多说无益,反正你这项目我不看好。 |
18
faceair 2019-05-29 13:01:43 +08:00
|
19
Eleutherios 2019-05-29 13:04:08 +08:00 via iPhone
作为甲方,我不能接受这个东西。
如果是“自动生成后端程序代码和说明文档”的话,我会觉得还不错,但像这种“完全托管后端”的自动化程序……我不会信任。 |
20
ziyue002 2019-05-29 13:12:46 +08:00
作者的开源精神应该支持,但是还是想说,不看好~
|
21
liuxey 2019-05-29 13:23:43 +08:00
又来了,我还记得上次有位老哥说“获得了马云的 GVP 奖状,贴的却是 github 地址”
|
22
yixiang 2019-05-29 13:24:09 +08:00
很好奇会用这个库的是哪些人,哪些公司。访问限制怎么做?所有数据暴露都给前端?不是吧。
|
23
TommyLemon OP |
24
TommyLemon OP @otakustay 不服的话拿其它开源项目来比啊
|
25
lijingyu68 2019-05-29 14:01:08 +08:00
感觉并没有解决什么实质的问题。看了下,这个东西有点类似 GraphQL,但没有 resolver 的机制,总之,看完后不知道业务逻辑应该放什么地方~。如果后端不放业务逻辑的话,还不如用 firebase,直接查询数据库。
|
26
TommyLemon OP |
27
TommyLemon OP @broadliyn 主要使用 Java,偶尔用用 JavaScript,什么时候 Java 成了前端语言了?我是孤陋寡闻了?
|
28
TommyLemon OP @royzxq 国人的习惯就是喜欢 QQ 提问,我都是经常引导他们去发 issue,
能很好地保留内容方便后面的人查看,也没多少人愿意 |
29
TommyLemon OP @rrfeng Talk is cheap, show me your code/project.你有什么资格怎么说?
|
30
janxin 2019-05-29 14:06:31 +08:00 2
大哥你推广也不能发这么频繁吧...
|
31
deadEgg 2019-05-29 14:16:33 +08:00
GraphQL 之所以设计这么复杂是有原因的,
1. 它会更加灵活 2. 安全性更好 3. 扩展起来容易 所以楼主你可以发软文,"完爆"有点扯。 |
32
TommyLemon OP @broadliyn
我可从来没说 APIJSON 普及率比 Hibernate 高, 反而承认了 Hibernate 的普及率和历史地位, 证据摆在这里,你这造谣抹黑就很过分了 https://www.v2ex.com/t/507671#r_6456259 |
33
TommyLemon OP @blless 并不是直接哦,中间隔着协议,后端也可以提供 远程函数 来扩展自定义的业务处理逻辑。
数据库模型也是为业务服务的,APIJSON 简化了应用层的模型,但足够提供前端要的数据和结构了, 在一般的互联网项目中,后端提供的绝大部分 API 就是为了给前端调用的,极少数可能给其它内部或外部系统调用, 不管黑猫白猫,捉到耗子的就是好猫,没必要固守原有的思维。 |
34
TommyLemon OP @TommyLemon APIJSON 简化了模型不仅开发工作量低、效率高,而且执行性能也更好,
不用再在 JSON, POJO, VO, DO, DTO 等一堆模型里转来转去了,自动转换一般用反射这很耗性能的。 |
35
TommyLemon OP @faceair 哈哈,其实就是 JSON,只不过在它的基础上扩展了功能、增强了用法,
Postman, Chrome 控制台, fastjson, JSON 在线解析 等各种 JSON 的封装、解析、展示 的工具都能用的 |
36
fyxtc 2019-05-29 15:36:09 +08:00 17
楼主的逻辑很奇怪,别人要评价你的东西,你的资格定义是别人的产品是否在某些数据上超越你,而不是讨论别人为什么觉得其他的产品比你优秀。你发出来是要被人使用的,我们作为使用者不是应该同维度对比使用的产品,你反而要求我们从开发者和使用者的角度来对比,就好像我评价你造的冰箱没有另一个好,你反问我说:你会制冷吗。挺没意思的。
|
37
xianxiaobo 2019-05-29 15:47:10 +08:00
不知道楼主的这个东西价值怎么样,希望能够有个大点的项目用楼主的方案来写,帮我们试下水吧。
|
38
TommyLemon OP @Eleutherios 并不是完全托管后端哦,和 BasS 有本质区别的,APIJSON 前后端的源码都是开源的,
公司的后端同事可以完全掌控 APIJSON Server,做定制需求和权限控制等。 |
39
TommyLemon OP @sleshep632 @MissThee @blless @allenhu @lijingyu68
关于后端自定义的业务逻辑处理,我已经在文档、评论、Demo 里写了很多了, 可以提供 远程函数 或者 重写相关方法,大家还可以看看网友写的文章, 文中强调了 APIJSON 使用很灵活,重写一些方法就能自定义处理。 APIJSON 自动化接口和文档的快速开发神器 (一) https://blog.csdn.net/qq_41829492/article/details/88670940 |
40
TommyLemon OP @allenhu 如果你做的不是前后端分离的项目,没有碰到各种 接口、文档、沟通 等一堆烦人的问题,
也不需要省去大量的后端开发工作量,尤其是全栈开发 或者 PHP,JSP,ASP 等后端渲染, 那的确不需要 APIJSON,毕竟就不是为了这些应用场景而生的。 为什么要用自动化接口与文档 ORM 库 APIJSON ? 前后端接口的 沟通、文档、联调 等 10 大痛点解析 github.com/APIJSON/APIJSON/wiki |
41
TommyLemon OP @ziyue002 感谢支持,从 16 年坚持到现在,目前仅仅在项目主页登记的就有 7 家企业了,还有就是拿了 GVP 奖。
|
42
wangxiaoaer 2019-05-29 16:11:50 +08:00 11
按理说,楼主也是在为开源做贡献,我们应该支持,可是我真的忍不住想 block 楼主,原因如下:
1 )项目文档差 缺少渐进式的项目描述。此外,所谓的图文指南看起来很像野路子出来的( https://github.com/APIJSON/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md ),大哥,什么年代了,使用你的项目还要 clone 下来改源码? maven gradle 呢? 2 )摆不正自己的位置 天天跟 hibernate 比,我很奇怪,你应该跟 GraphQL 比才是啊。你这个东西跟 ORM 一点都不沾边。 3 )推广手段 你的贴子都烦死了,一贴一大段,秒天秒地秒空气,我记得之前还通过 star 表明自己超过了 hibernate。呵呵哒,兄弟,一个项目的认可度是由用户自己决定的,如果你的项目真的达到了你所谓的程度,用户会自己口碑相传的啊,你看 Vue 做过这么 low 的推广码?强烈怀疑你是在走网红推广路线,故意的。 block 不谢。 |
43
TommyLemon OP @liuxey 是 码云 Gitee 哦
https://gitee.com/TommyLemon/APIJSON 感觉码云上 APIJSON 推不动啊,已经是大势已定了, GitHub 上 Star 比较多,马太效应 更容易吸引 Star 嘿嘿。 |
44
AbrahamGreyson 2019-05-29 17:12:05 +08:00 1
如果你真的相信它有用武之地,有潜力受欢迎,就别给这么好的项目招黑了吧。
看看真正改变世界,或者说,至少在解决了某个问题的项目,有谁在标题里夸夸其谈,回帖怼天怼地怼空气,一副容不得讨论的样子,有哪个正经的技术人,在公开场合数星星啊。 技术圈是有一些潜规则的。 不要让人反感你,是善待你项目的第一步。 |
45
TommyLemon OP @yixiang 登记了一小部分,希望用的公司也都登记下,互惠互利啊,唉。
[传音是 2018 年中国出海品牌 50 强之一]( http://www.transsion.com/news/detail-96.html); [社宝 A 轮融资 3000w,现在 B 轮也融资完成了]( https://www.qichacha.com/product_044eab52-fd12-41e9-8912-39b37dc16a13),都是很棒的公司👍 [力拓飞远 A+ 轮融资 1920 万人民币]( https://www.qichacha.com/product_a917fcca-fbb1-44a2-a079-56985ebf8f9c.html); [山东邵氏信息科技集团]( http://www.shaoshi.com.cn/) 营收也有好几个亿,几千人员工,很厉害啊 [上海爱拍拍电子商务有限公司]( https://www.qichacha.com/firm_e230e1689d55823546ed3b38fbea999c.shtml) 刘强东持股 https://github.com/APIJSON/APIJSON#%E4%BD%BF%E7%94%A8%E7%99%BB%E8%AE%B0 |
46
TommyLemon OP @TommyLemon
登记了一小部分,希望用的公司也都登记下,互惠互利啊,唉。 传音是 2018 年中国出海品牌 50 强之一 http://www.transsion.com/news/detail-96.html/ 社宝 A 轮融资 3000w,现在 B 轮也融资完成了 https://www.qichacha.com/product_044eab52-fd12-41e9-8912-39b37dc16a13/ 力拓飞远 A+ 轮融资 1920 万人民币 https://www.qichacha.com/product_a917fcca-fbb1-44a2-a079-56985ebf8f9c.html/ 山东邵氏信息科技集团营收也有好几个亿,几千人员工,很厉害啊 http://www.shaoshi.com.cn/about.html/ 上海爱拍拍电子商务有限公司,刘强东持股 https://www.qichacha.com/firm_e230e1689d55823546ed3b38fbea999c.shtml/ https://github.com/APIJSON/APIJSON#%E4%BD%BF%E7%94%A8%E7%99%BB%E8%AE%B0/ |
47
TommyLemon OP @TommyLemon 有些链接需要去除末尾的 / 才能正常访问
|
48
hlwjia 2019-05-29 17:25:46 +08:00
开源是好事,就是“改变世界”不要整天挂在嘴边
|
49
TommyLemon OP @faceair 你的图片我现在才刷出来,我前端很菜的,而是那是 2 年前写的代码了,应该通过对象来封装更好
```js var t= {} t[table] = json t.tag = tag return t ``` |
50
TommyLemon OP @TommyLemon
截屏的 JavaScript 代码不建议使用了, APIJSONAuto 也不用, APIJSON 核心是后端 Java 的 ORM 库 APIJSONORM 哦, 前端只要发送 HTTP POST 提交 JSON 就行了,Ajax,Axios 等各种库都能用。 https://github.com/APIJSON/APIJSON/tree/master/APIJSON-Java-Server |
51
TommyLemon OP |
52
myyou 2019-05-29 17:43:22 +08:00
这个能应付那种数据来源不是单纯的某一种数据库,而是多种数据库的情况吗?
|
53
Accat1024 2019-05-29 17:46:19 +08:00 via Android
老哥,接口需要自己写吗? 会自动发布接口吗?
|
54
TommyLemon OP @otakustay
其实 1w 多行代码 [可能] 的 bug 只有 16 个, 有几个确认是并非 bug,只是冗余的判断导致扫描器分析错误而已, 也有几个确认确实是 bug,后面改了一些了, 还有一些还没时间去一一验证。 24 个改进建议也确认了部分,改了一些了。 能做到这个程度开源项目其实整体占比很低的,我用过很多热门的项目, 经常使用中或者看源码就发现很多 bug 了,而且其中很多代码行数还原没 APIJSON 高。 有兴趣的话可以对 APIJSON 还有你用的热门开源项目都扫描一遍,给 APIJSON 发个 issue 提交报告。 |
55
TommyLemon OP @myyou 可以的,APIJSONORM 支持
多数据库 "@database":"PostgreSQL" //MySQL, PostgreSQL 可以混合使用 多模式 "@schema":"sys" //sys, postgres, apijson, app 等系统 Schema 和自己的 Schema 都可以混合使用 |
56
TommyLemon OP @Accat1024 适合用 APIJSON 的 增删改查 接口都可以使用 APIJSON 自动化 API,后端不用写代码,前端直接调用。
APIJSON 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的 API。 能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。 适合中小型前后端分离的项目,尤其是互联网创业项目和企业自用项目。 对于一般的互联网中小型项目而言,这些 API 能占到 80% 以上,可以用 APIJSON 省去 API 开发工作。 剩下的一些不适合的建议自己加接口,按照传统方式或其它方式去实现。 当然如果对 APIJSON 源码比较熟,可以像这个用户一样重写方法去定制自己的需求。 blog.csdn.net/qq_41829492/article/details/88670940 |
57
TommyLemon OP @Accat1024 APIJSONORM 是一个 ORM 库,发布源码属于运维工作了,有 Jenkins 等很多其它工具可以使用的。
@myyou 多数据库、多模式的文档 在这里,底部的 功能符 /对象关键词 @database 和 @schema https://github.com/APIJSON/APIJSON/blob/master/Document.md#3.2 |
58
1cming 2019-05-29 18:00:52 +08:00
楼主这种凤姐式的自我营销实在不敢苟同。
|
59
jc89898 2019-05-29 18:01:39 +08:00 1
你这 1600 个 commit 怎么感觉 80%都是 Update Document.md 哈哈
|
60
Accat1024 2019-05-29 18:02:04 +08:00 via Android
@TommyLemon 我可以这么理解吗? 所有 GET 请求都发送到 http://host:port/get, 然后通过 json 来描述我们通常项目用的接口?
最近有一个项目,需要根据 sql 生成 json 并自动发布接口,希望参考一下,感谢。🙏🙏 |
61
polebug 2019-05-29 18:20:37 +08:00 via Android
更适合一个前端撸全栈的项目吧 其余的不管大项目小项目 前端应该不想管数据库吧 (不妨做个调查
楼主挑战一般化开发模式 值得敬佩 但不一定被人接受 |
62
TommyLemon OP |
63
TommyLemon OP @Accat1024 对的,不过虽然支持 HTTP GET,但建议还是用 HTTP POST,
不需要编码 url encode 和转码 url decode,HTTP 传输性能和稳定性都更好。 你可以使用 "@explain":true,来查看每次请求自动生成的 SQL: POST: http://apijson.cn:8080/get ```js { "[]": { "join": "</User/id@", // Comment LEFT JOIN User ON User.id = Comment.userId "Comment": { "@column": "id,userId,content", // SELECT id,userId,content "@order": "date-" // ORDER BY date DESC }, "User": { "@column": "id,name", // SELECT id,name "id@": "/Comment/userId" } }, "@explain": true } ``` 返回 Response: ```js { "[]": [ { "Comment": { "@explain": { "sql": "SELECT `Comment`.`id`,`Comment`.`userId`,`Comment`.`content`, `User`.`id`,`User`.`name` FROM `sys`.`Comment` AS `Comment` LEFT JOIN ( SELECT `id`,`name` FROM `sys`.`apijson_user` ) AS `User` ON `User`.`id` = `Comment`.`userId` ORDER BY `Comment`.`date` DESC LIMIT 2 OFFSET 0", "list": [ { "id": 1, "select_type": "SIMPLE", "table": "Comment", "type": "ALL", "rows": 476, "filtered": 100, "Extra": "Using filesort" }, { "id": 1, "select_type": "SIMPLE", "table": "apijson_user", "type": "eq_ref", "possible_keys": "PRIMARY", "key": "PRIMARY", "key_len": "8", "ref": "sys.Comment.userId", "rows": 1, "filtered": 100 } ] }, "id": 1559125514580, "userId": 82001, "content": "测试新增评论" }, "User": { "@explain": { "sql": "SELECT `id`,`name` FROM `sys`.`apijson_user` WHERE ( (`id` = 82001) ) LIMIT 1 OFFSET 0", "list": [ { "id": 1, "select_type": "SIMPLE", "table": "apijson_user", "type": "const", "possible_keys": "PRIMARY", "key": "PRIMARY", "key_len": "8", "ref": "const", "rows": 1, "filtered": 100 } ] }, "id": 82001, "name": "测试账号" } }, { "Comment": { "id": 1559056772210, "userId": 82001, "content": "测试新增评论" }, "User": { "@explain": { "sql": "SELECT `id`,`name` FROM `sys`.`apijson_user` WHERE ( (`id` = 82001) ) LIMIT 1 OFFSET 0", "list": [ { "id": 1, "select_type": "SIMPLE", "table": "apijson_user", "type": "const", "possible_keys": "PRIMARY", "key": "PRIMARY", "key_len": "8", "ref": "const", "rows": 1, "filtered": 100 } ] }, "id": 82001, "name": "测试账号" } } ], "code": 200, "msg": "success", "sql:generate/cache/execute/maxExecute": "7/3/4/200", "depth:count/max": "3/5", "time:start/duration/end": "1559126202459/3/1559126202462" } ``` |
64
TommyLemon OP |
65
TommyLemon OP @polebug
不需要前端管数据库的哦,那是后端的事情。后端把数据库建好,配置好 APIJSON 的数据库连接给前端调用。 至于如何请求,后端把 URL 和请求 JSON 放到 APIJSONAuto 接口工具上传(提供源码可以部署到内网), 前端就能在共享的测试用例列表里浏览和使用了。 这种方式确实是在跳转传统的 RESTful 等开发方式,很多人不理解、不支持,但我还是一路坚持下来了。 目前已经有多家企业在使用中,其中不乏营收过亿的企业(传音 2018 年 226 亿)和 融资上千万的企业(社保科技) https://github.com/APIJSON/APIJSON |
66
jk1030 2019-05-29 18:47:57 +08:00
也就简单项目能用下 对于领域对象有点要求的项目或者是分布式项目就是自杀吧 那么重的耦合度,除非是写了跑路别人维护
|
67
peyppicp 2019-05-29 19:01:28 +08:00
我有一个问题,如果我前端需要展示一个敏感的数据需要部分隐藏,比如身份证号,这个用你的项目怎么实现?如果前端加密的话根本不安全。抓个包就完蛋了。
而且这种数据需要加密存储到数据库里,难道要在前端写秘钥吗? |
68
yuankui 2019-05-29 19:23:06 +08:00
秒天秒地,秒空气~
|
69
allenhu 2019-05-29 19:51:38 +08:00 1
@TommyLemon 本来是要用来给前后端解耦的,这样一来,像 mask 某个字段(或者只有部分人能读取某个字段)这种很平常的场景,还是要后端来参与进来,那么,这个项目的意义是啥,造一个新轮子麻烦前后端双方?
|
70
polebug 2019-05-29 19:52:43 +08:00
@TommyLemon 我觉得你的想法是好的 但是现在这个项目刚起来 发帖介绍以及 github 不应该放过多的所谓的荣誉来证明这个项目有多好 应该多听听程序员们的想法 这样才能帮助项目变好不是吗
|
71
skadi 2019-05-29 21:53:08 +08:00
老哥又是你,我起码见了四五次呢.
|
72
xiongbiao 2019-05-29 22:01:10 +08:00
害怕
|
73
agee 2019-05-29 22:22:38 +08:00 via iPhone
这个项目看到过好多次,其中还有几次是 v 友推荐的,从推荐场景来说都还是挺不错的,但是作者一出来推广马上就有一种华为公关部的感觉,说真的,如果真的为项目好,不能一直负向宣传啊。虽然还没有用但是看理念还是可以的,如果能用好,个人小项目的话能节省不少时间,但是大项目就本身就不会为在这方面节省时间或者图方便而去使用这种框架,更多的考虑是系统化工业化。这估计这也是 v2 上的大老看不上的原因,这些都是很正常的啊,心态不平如何能静下来好好写代码呢。
|
74
agee 2019-05-29 22:27:46 +08:00 via iPhone
开源也应该多少对自己目标用户有个定位,从作者的宣传来看,明显对于目标用户定位是错的,给人带来太多反感。
|
75
zander1024 2019-05-29 23:33:59 +08:00
block ,病毒营销
|
76
Bramblex2 2019-05-29 23:49:10 +08:00
项目是好项目……
但是这个营销路子太野了,有一种 q 群大神的感觉。 |
77
carlclone 2019-05-30 08:12:40 +08:00 via Android
像培训班出来的,哈哈
|
78
murmur 2019-05-30 08:21:41 +08:00 1
|
80
leonme 2019-05-30 08:25:04 +08:00 via Android
看到大家这么喷我就放心了,哪有开源项目这么推广的
|
81
luozic 2019-05-30 08:44:31 +08:00 via iPhone 1
产品很不错,适用场景 /范围可以说清楚点
|
82
omph 2019-05-30 08:45:20 +08:00
看测试界面和例子都感觉挺好的,一看楼主的宣传,反倒没信心了,用语非常情绪化,不像是个优秀程序员,缺少严谨务实的作风
所以楼主如果真想做好推广,先要明确受众主要是开发群体,必须给人以专业化的印象,不然谁敢用? |
84
Ehco1996 2019-05-30 08:58:07 +08:00
所以能问下 cache 相关是怎么处理的? 如何主动更新?
|
85
guoyang 2019-05-30 08:58:15 +08:00
不好意思,由于没有阅读源代码,我想知道数据存储是如何实现的,一个对象一张表吗,二是如何实现查询的高效,索引如何做的,因为你并不知道用户的查询语句,三是如果一个对象 1 亿条数据,该项目如何实现数据的高效存储和索引?谢谢
|
86
guoyang 2019-05-30 09:06:14 +08:00
@TommyLemon 不好意思,我看了你的说明文档,还是得靠用户自己创建表,同时根据查询语句自己去创建对应的索引,这个过程如果你能够完美的解决,同时还能保证索引的高效和空间利用,那么我觉得你这个项目可以更上一个台阶。
|
87
blindpirate 2019-05-30 09:09:14 +08:00
看了下代码,感觉就是——也许能跑,但是路子很野,浓浓的培训班风格。这样的项目我是不敢用的。一个号称自动化的库,本身却没有一点自动化?首页上放了一堆图标,却连一个`Build passed`这样的图标都没有?更别提测试少的可怜,几乎没有,启动方式要求在 IDE 中点击运行?
顺便说一句,楼主你的这些工具都该升级了: Windows 7 + JDK 1.7.0_71 + Eclipse 4.6.1 + IntellIJ 2016.3 和 OSX EI Capitan + JDK 1.8.0_91 + Eclipse 4.6.1 + IntellIJ 2016.2.5 |
89
murmur 2019-05-30 09:21:18 +08:00
提点意见
1、缺少英文文档,所以楼上人觉得你 low,也没法给外语区推广 2、缺少 benchmark,这东西我感觉企业开发不错,毕竟是看实现不看性能,但是想给互联网用别人对性能非常看重 3、github 的标签有碰瓷嫌疑,swift、typescript、fastjson 这些关键字有点不相干,真的是为了蹭搜索热度么 |
90
kylix 2019-05-30 09:25:29 +08:00
呵呵。这种推广手法,,不管项目好不好,是不敢用的。
|
91
murmur 2019-05-30 09:30:12 +08:00 1
@LemonCoo1 我的意思是国内的很多开发者戴着有色眼镜看人,国外的框架刚出个 beta 就吹上天,前景无限锤打竞品
国内出个什么框架就是罪无可恕,垃圾的一比,毫无竞争实力,给自己宣传一下都是罪恶 当年 vue 出来的时候,拿作者就一个人不靠谱说事的人说了几年了 苹果那种 xx 不通的中文叫苹果特色,楼主稍微夸张一点的语气叫情绪化,话不能这么说是吧 什么时候能用事实说话,比如他性能不够,哪里有漏洞,哪个功能没实现就开始宣传,这才叫客观 当然这楼主给的数据不够,我找了半天没看到 benchmark,那就应该疯狂拿数据打他脸对不对? |
92
phpfpm 2019-05-30 09:35:49 +08:00
别的不说,您啥时候把您的站点的 ssl 弄上去?
|
93
gccdchen 2019-05-30 09:43:55 +08:00
建议:
|
94
shenqi 2019-05-30 09:45:30 +08:00
感觉不错。
|
95
gccdchen 2019-05-30 09:52:05 +08:00 2
LZ 项目应该还是很有用的 .. 但是文档看得太累 , 与其撕逼不如修改下文档.
营销气息太重啦 建议: 1, 文档顺序 , gitbook 格式 . 第一点 , 先写作用,功能 (限制 10 行以内) 第二点 , 快速上手 放项目 Readme.md , 越傻瓜越好 , 能用 maven/gradle 引入最好.需要启动就做成插件,或者命令行.最好 1 分钟能跑起来. 至于奖项这些可以在 wiki 另开一页.不然别人觉得好大喜功. 感谢 lz 付出 |
96
shuax 2019-05-30 09:56:16 +08:00
改变世界,再见!
|
97
sxw11 2019-05-30 10:01:43 +08:00 1
emmm,原来在前端眼里后端真的只是 crud。。。准备了一对反驳的话都懒得说了,只想说楼主加油哟,楼主棒棒哟
|
98
beidounanxizi 2019-05-30 10:11:51 +08:00 via iPhone
评论比帖子精彩系列
|
99
KickAssTonight 2019-05-30 10:33:09 +08:00
感觉像是前端直接用 sql 语句去请求后端接口了,挺有意思的,但是感觉做中间层比较合适,放在前端不太安全。
|
100
thisisgpy 2019-05-30 10:33:43 +08:00
最主要的是,码云那个证书并没有一毛钱作用。码云上的用户啥水平大家心里没点数么?
|