V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
TommyLemon
V2EX  ›  程序员

技术改变世界,前后协同变革 自动化 ORM 可靠度高达 99.85%

  •  
  •   TommyLemon ·
    TommyLemon · 2019-05-29 09:33:59 +08:00 · 25962 次点击
    这是一个创建于 2035 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 简介

    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 支持下吧,谢谢^_^

    https://github.com/APIJSON/APIJSON

    第 1 条附言  ·  2019-05-29 15:58:41 +08:00
    关于后端自定义的业务逻辑处理,我已经在文档、评论、Issue 里写了很多了,
    可以提供 远程函数 或者 重写相关方法,大家还可以看看网友写的文章,
    文中强调了 APIJSON 使用很灵活,重写一些方法就能自定义处理。

    APIJSON 自动化接口和文档的快速开发神器 (一)
    https://blog.csdn.net/qq_41829492/article/details/88670940
    第 2 条附言  ·  2019-05-29 16:21:31 +08:00

    APIJSON 生态内其它项目

    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 支持下他们吧。

    第 3 条附言  ·  2019-05-30 12:05:59 +08:00

    以上是各种语言的 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 还有 已登记使用的 企业或项目、贡献者们、生态内其它项目、推荐博客、码云链接 等等。

    206 条回复    2019-06-29 16:29:51 +08:00
    1  2  3  
    TommyLemon
        1
    TommyLemon  
    OP
       2019-05-29 10:14:04 +08:00
    总共 10617 行代码,16 个「可能」的 bug,24 个改进建议, (1 - bugs/lines) 高达 99.85% 。
    可见 APIJSON 代码非常严谨可靠。
    sleshep632
        2
    sleshep632  
       2019-05-29 10:21:16 +08:00   ❤️ 3
    第一次见到把“奖状”放到项目主页的...
    如果按照这个项目逻辑,前端维护 db 索引吗?
    TommyLemon
        3
    TommyLemon  
    OP
       2019-05-29 10:33:49 +08:00
    @sleshep632 放奖状有啥奇怪的,你去看看 Mybatis-Plus,
    再说大部分项目都没有呢,GVP 又不是随便能申请到的。
    建表、维护表那都是后端做的事,DB 索引当然也是后端维护,
    源码、Demo、文档、视频都提供了,麻烦了解清楚再说,谢谢
    TommyLemon
        4
    TommyLemon  
    OP
       2019-05-29 10:34:47 +08:00
    MissThee
        5
    MissThee  
       2019-05-29 10:48:00 +08:00
    之前看过 GraphQL 也是有点儿类似吧,都是前端给一些对象信息,后端根据这些信息组返回值。
    暂时还不太喜欢这样的设计,感觉像是让前端写变体的 sql 查询语句一样。
    总感觉这种方式怪怪的。想极端点儿,后台直接写一个接口接收原生 sql 语句,返回执行结果,前端学会原生 sql 语句,就可以解放后台了。。。-_-
    TommyLemon
        6
    TommyLemon  
    OP
       2019-05-29 10:52:20 +08:00
    @MissThee 是有些类似,很多人没搞清楚总是说“比你的 APIJSON 强”,“完爆 APIJSON ”之类的。
    事实上 Facebook 的 GraphQL 是 Gateway,而 APIJSON 是 ORM,有着本质上的区别,
    真要放一般的互联网项目开发中拿来对比,那就是 APIJSON “完爆” GraphQL 了。
    https://juejin.im/post/5ae80edd51882567277433cf
    TommyLemon
        7
    TommyLemon  
    OP
       2019-05-29 10:52:57 +08:00
    @MissThee 我很早也考虑过直接传 SQL,而不是搞一个 APIJSON 的轮子。
    但解析 SQL 语法,再校验权限、结构、内容,最后再转回 SQL,
    不说性能问题,真要这么好搞业内也应该有不错的开源方案了。

    而且 SQL 不能直观地反映返回 JSON 的数据结构,
    APIJSON 就能做到看请求知结果,所求即所得。
    APIJSON 的 提取字段、远程函数 功能也不是 SQL 方案能方便地实现的。
    还有 自动加注释、自动生成封装请求 JSON 的代码,用 SQL 方案实现也很困难,甚至根本不可能准确地实现。

    为什么要用 APIJSON ?或者 APIJSON 有什么用?
    https://github.com/TommyLemon/APIJSON/wiki
    blless
        8
    blless  
       2019-05-29 11:06:25 +08:00 via Android   ❤️ 5
    你又来辣…

    每次看你刷屏都挺累的,这次说点正经的。虽然看起来确实挺有用,不过我肯定不会用的。
    业务核心在于业务抽象跟业务建模。也就是设计业务的时候压根不会考虑接口层如何实现和数据层如何实现。核心业务实现完成后根据需求动态添加接口跟适配数据库。
    小项目用用无所谓,大型项目用这种设计必然耦合越来越重,一个业务变更就是死
    anyele
        9
    anyele  
       2019-05-29 11:13:35 +08:00 via Android
    老哥我来辣
    TommyLemon
        10
    TommyLemon  
    OP
       2019-05-29 11:23:50 +08:00
    @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。
    能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。
    适合中小型前后端分离的项目,尤其是互联网创业项目和企业自用项目。

    已经把适用场景说清楚了。
    TommyLemon
        11
    TommyLemon  
    OP
       2019-05-29 11:24:17 +08:00
    @anyele 你好,请多多指教
    broadliyn
        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 权限集成管理手脚架的业余平台完全看不出这种奖状有什么价值。玻璃框+打印纸大概成本也就几十块钱吧。

    可能楼主就是开源界的罗永浩吧。
    otakustay
        13
    otakustay  
       2019-05-29 11:46:54 +08:00   ❤️ 1
    千行 BUG 率约 1.5,不算什么特别严谨可靠吧……
    allenhu
        14
    allenhu  
       2019-05-29 12:19:43 +08:00
    数据的读写从来不是问题,问题是如果有些字段不允许读,或者读出来后需要经过处理再展示,要怎么做?
    royzxq
        15
    royzxq  
       2019-05-29 12:30:05 +08:00   ❤️ 6
    issues 10 open 69 closed.
    stars 5900.

    issue 都通过 QQ 群解决了?
    rrfeng
        16
    rrfeng  
       2019-05-29 12:43:43 +08:00 via Android
    智障项目
    blless
        17
    blless  
       2019-05-29 13:01:10 +08:00 via Android
    @TommyLemon restful rpc 只是协议,耦不耦合看业务设计,API 设计原则上也是要精确避免歧义跟最小数据…
    你这套是数据流从前端直接穿透到后端数据库,耦合程度简直爆炸。而且原本业务开发核心其实是业务模型,到你这核心就变成数据库模型。
    多说无益,反正你这项目我不看好。
    faceair
        18
    faceair  
       2019-05-29 13:01:43 +08:00
    这写法也挺酷的
    Eleutherios
        19
    Eleutherios  
       2019-05-29 13:04:08 +08:00 via iPhone
    作为甲方,我不能接受这个东西。

    如果是“自动生成后端程序代码和说明文档”的话,我会觉得还不错,但像这种“完全托管后端”的自动化程序……我不会信任。
    ziyue002
        20
    ziyue002  
       2019-05-29 13:12:46 +08:00
    作者的开源精神应该支持,但是还是想说,不看好~
    liuxey
        21
    liuxey  
       2019-05-29 13:23:43 +08:00
    又来了,我还记得上次有位老哥说“获得了马云的 GVP 奖状,贴的却是 github 地址”
    yixiang
        22
    yixiang  
       2019-05-29 13:24:09 +08:00
    很好奇会用这个库的是哪些人,哪些公司。访问限制怎么做?所有数据暴露都给前端?不是吧。
    TommyLemon
        23
    TommyLemon  
    OP
       2019-05-29 13:58:41 +08:00
    @broadliyn
    把你的开源项目展示下,让大家开开眼,看下有没有拿到比 GVP 更高的荣誉,
    有哪些公司在用,Star 有多少。
    批判别人热心免费提供的东西,首先你自己得有资格。
    TommyLemon
        24
    TommyLemon  
    OP
       2019-05-29 13:59:13 +08:00
    @otakustay 不服的话拿其它开源项目来比啊
    lijingyu68
        25
    lijingyu68  
       2019-05-29 14:01:08 +08:00
    感觉并没有解决什么实质的问题。看了下,这个东西有点类似 GraphQL,但没有 resolver 的机制,总之,看完后不知道业务逻辑应该放什么地方~。如果后端不放业务逻辑的话,还不如用 firebase,直接查询数据库。
    TommyLemon
        26
    TommyLemon  
    OP
       2019-05-29 14:01:57 +08:00
    @allenhu
    服务器端禁止单个字段请求如何实现? #31
    https://github.com/APIJSON/APIJSON/issues/31
    TommyLemon
        27
    TommyLemon  
    OP
       2019-05-29 14:02:52 +08:00
    @broadliyn 主要使用 Java,偶尔用用 JavaScript,什么时候 Java 成了前端语言了?我是孤陋寡闻了?
    TommyLemon
        28
    TommyLemon  
    OP
       2019-05-29 14:04:16 +08:00
    @royzxq 国人的习惯就是喜欢 QQ 提问,我都是经常引导他们去发 issue,
    能很好地保留内容方便后面的人查看,也没多少人愿意
    TommyLemon
        29
    TommyLemon  
    OP
       2019-05-29 14:05:15 +08:00
    @rrfeng Talk is cheap, show me your code/project.你有什么资格怎么说?
    janxin
        30
    janxin  
       2019-05-29 14:06:31 +08:00   ❤️ 2
    大哥你推广也不能发这么频繁吧...
    deadEgg
        31
    deadEgg  
       2019-05-29 14:16:33 +08:00
    GraphQL 之所以设计这么复杂是有原因的,

    1. 它会更加灵活
    2. 安全性更好
    3. 扩展起来容易

    所以楼主你可以发软文,"完爆"有点扯。
    TommyLemon
        32
    TommyLemon  
    OP
       2019-05-29 15:05:27 +08:00
    @broadliyn
    我可从来没说 APIJSON 普及率比 Hibernate 高,
    反而承认了 Hibernate 的普及率和历史地位,
    证据摆在这里,你这造谣抹黑就很过分了
    https://www.v2ex.com/t/507671#r_6456259
    TommyLemon
        33
    TommyLemon  
    OP
       2019-05-29 15:18:51 +08:00
    @blless 并不是直接哦,中间隔着协议,后端也可以提供 远程函数 来扩展自定义的业务处理逻辑。
    数据库模型也是为业务服务的,APIJSON 简化了应用层的模型,但足够提供前端要的数据和结构了,
    在一般的互联网项目中,后端提供的绝大部分 API 就是为了给前端调用的,极少数可能给其它内部或外部系统调用,
    不管黑猫白猫,捉到耗子的就是好猫,没必要固守原有的思维。
    TommyLemon
        34
    TommyLemon  
    OP
       2019-05-29 15:20:32 +08:00
    @TommyLemon APIJSON 简化了模型不仅开发工作量低、效率高,而且执行性能也更好,
    不用再在 JSON, POJO, VO, DO, DTO 等一堆模型里转来转去了,自动转换一般用反射这很耗性能的。
    TommyLemon
        35
    TommyLemon  
    OP
       2019-05-29 15:24:47 +08:00
    @faceair 哈哈,其实就是 JSON,只不过在它的基础上扩展了功能、增强了用法,
    Postman, Chrome 控制台, fastjson, JSON 在线解析 等各种 JSON 的封装、解析、展示 的工具都能用的
    fyxtc
        36
    fyxtc  
       2019-05-29 15:36:09 +08:00   ❤️ 17
    楼主的逻辑很奇怪,别人要评价你的东西,你的资格定义是别人的产品是否在某些数据上超越你,而不是讨论别人为什么觉得其他的产品比你优秀。你发出来是要被人使用的,我们作为使用者不是应该同维度对比使用的产品,你反而要求我们从开发者和使用者的角度来对比,就好像我评价你造的冰箱没有另一个好,你反问我说:你会制冷吗。挺没意思的。
    xianxiaobo
        37
    xianxiaobo  
       2019-05-29 15:47:10 +08:00
    不知道楼主的这个东西价值怎么样,希望能够有个大点的项目用楼主的方案来写,帮我们试下水吧。
    TommyLemon
        38
    TommyLemon  
    OP
       2019-05-29 15:47:39 +08:00
    @Eleutherios 并不是完全托管后端哦,和 BasS 有本质区别的,APIJSON 前后端的源码都是开源的,
    公司的后端同事可以完全掌控 APIJSON Server,做定制需求和权限控制等。
    TommyLemon
        39
    TommyLemon  
    OP
       2019-05-29 15:52:47 +08:00
    @sleshep632 @MissThee @blless @allenhu @lijingyu68
    关于后端自定义的业务逻辑处理,我已经在文档、评论、Demo 里写了很多了,
    可以提供 远程函数 或者 重写相关方法,大家还可以看看网友写的文章,
    文中强调了 APIJSON 使用很灵活,重写一些方法就能自定义处理。

    APIJSON 自动化接口和文档的快速开发神器 (一)
    https://blog.csdn.net/qq_41829492/article/details/88670940
    TommyLemon
        40
    TommyLemon  
    OP
       2019-05-29 15:57:00 +08:00
    @allenhu 如果你做的不是前后端分离的项目,没有碰到各种 接口、文档、沟通 等一堆烦人的问题,
    也不需要省去大量的后端开发工作量,尤其是全栈开发 或者 PHP,JSP,ASP 等后端渲染,
    那的确不需要 APIJSON,毕竟就不是为了这些应用场景而生的。

    为什么要用自动化接口与文档 ORM 库 APIJSON ?
    前后端接口的 沟通、文档、联调 等 10 大痛点解析
    github.com/APIJSON/APIJSON/wiki
    TommyLemon
        41
    TommyLemon  
    OP
       2019-05-29 16:04:10 +08:00
    @ziyue002 感谢支持,从 16 年坚持到现在,目前仅仅在项目主页登记的就有 7 家企业了,还有就是拿了 GVP 奖。
    wangxiaoaer
        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 不谢。
    TommyLemon
        43
    TommyLemon  
    OP
       2019-05-29 16:44:21 +08:00
    @liuxey 是 码云 Gitee 哦
    https://gitee.com/TommyLemon/APIJSON

    感觉码云上 APIJSON 推不动啊,已经是大势已定了,
    GitHub 上 Star 比较多,马太效应 更容易吸引 Star 嘿嘿。
    AbrahamGreyson
        44
    AbrahamGreyson  
       2019-05-29 17:12:05 +08:00   ❤️ 1
    如果你真的相信它有用武之地,有潜力受欢迎,就别给这么好的项目招黑了吧。
    看看真正改变世界,或者说,至少在解决了某个问题的项目,有谁在标题里夸夸其谈,回帖怼天怼地怼空气,一副容不得讨论的样子,有哪个正经的技术人,在公开场合数星星啊。
    技术圈是有一些潜规则的。
    不要让人反感你,是善待你项目的第一步。
    TommyLemon
        45
    TommyLemon  
    OP
       2019-05-29 17:14:29 +08:00
    @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
    TommyLemon
        46
    TommyLemon  
    OP
       2019-05-29 17:17:38 +08:00
    @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/
    TommyLemon
        47
    TommyLemon  
    OP
       2019-05-29 17:19:35 +08:00
    @TommyLemon 有些链接需要去除末尾的 / 才能正常访问
    hlwjia
        48
    hlwjia  
       2019-05-29 17:25:46 +08:00
    开源是好事,就是“改变世界”不要整天挂在嘴边
    TommyLemon
        49
    TommyLemon  
    OP
       2019-05-29 17:29:23 +08:00
    @faceair 你的图片我现在才刷出来,我前端很菜的,而是那是 2 年前写的代码了,应该通过对象来封装更好
    ```js
    var t= {}
    t[table] = json
    t.tag = tag

    return t
    ```
    TommyLemon
        50
    TommyLemon  
    OP
       2019-05-29 17:31:30 +08:00
    @TommyLemon
    截屏的 JavaScript 代码不建议使用了, APIJSONAuto 也不用,
    APIJSON 核心是后端 Java 的 ORM 库 APIJSONORM 哦,
    前端只要发送 HTTP POST 提交 JSON 就行了,Ajax,Axios 等各种库都能用。

    https://github.com/APIJSON/APIJSON/tree/master/APIJSON-Java-Server
    TommyLemon
        51
    TommyLemon  
    OP
       2019-05-29 17:36:07 +08:00

    APIJSONAuto 自动化接口管理工具,自动生成文档与注释、自动生成代码、自动化回归测试、自动静态检查等
    http://apijson.org/
    myyou
        52
    myyou  
       2019-05-29 17:43:22 +08:00
    这个能应付那种数据来源不是单纯的某一种数据库,而是多种数据库的情况吗?
    Accat1024
        53
    Accat1024  
       2019-05-29 17:46:19 +08:00 via Android
    老哥,接口需要自己写吗? 会自动发布接口吗?
    TommyLemon
        54
    TommyLemon  
    OP
       2019-05-29 17:47:32 +08:00
    @otakustay
    其实 1w 多行代码 [可能] 的 bug 只有 16 个,
    有几个确认是并非 bug,只是冗余的判断导致扫描器分析错误而已,
    也有几个确认确实是 bug,后面改了一些了,
    还有一些还没时间去一一验证。
    24 个改进建议也确认了部分,改了一些了。

    能做到这个程度开源项目其实整体占比很低的,我用过很多热门的项目,
    经常使用中或者看源码就发现很多 bug 了,而且其中很多代码行数还原没 APIJSON 高。
    有兴趣的话可以对 APIJSON 还有你用的热门开源项目都扫描一遍,给 APIJSON 发个 issue 提交报告。
    TommyLemon
        55
    TommyLemon  
    OP
       2019-05-29 17:49:55 +08:00
    @myyou 可以的,APIJSONORM 支持
    多数据库 "@database":"PostgreSQL" //MySQL, PostgreSQL 可以混合使用
    多模式 "@schema":"sys" //sys, postgres, apijson, app 等系统 Schema 和自己的 Schema 都可以混合使用
    TommyLemon
        56
    TommyLemon  
    OP
       2019-05-29 17:53:43 +08:00
    @Accat1024 适合用 APIJSON 的 增删改查 接口都可以使用 APIJSON 自动化 API,后端不用写代码,前端直接调用。
    APIJSON 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的 API。
    能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。
    适合中小型前后端分离的项目,尤其是互联网创业项目和企业自用项目。
    对于一般的互联网中小型项目而言,这些 API 能占到 80% 以上,可以用 APIJSON 省去 API 开发工作。
    剩下的一些不适合的建议自己加接口,按照传统方式或其它方式去实现。
    当然如果对 APIJSON 源码比较熟,可以像这个用户一样重写方法去定制自己的需求。

    blog.csdn.net/qq_41829492/article/details/88670940
    TommyLemon
        57
    TommyLemon  
    OP
       2019-05-29 17:57:22 +08:00
    @Accat1024 APIJSONORM 是一个 ORM 库,发布源码属于运维工作了,有 Jenkins 等很多其它工具可以使用的。

    @myyou 多数据库、多模式的文档 在这里,底部的 功能符 /对象关键词 @database 和 @schema
    https://github.com/APIJSON/APIJSON/blob/master/Document.md#3.2
    1cming
        58
    1cming  
       2019-05-29 18:00:52 +08:00
    楼主这种凤姐式的自我营销实在不敢苟同。
    jc89898
        59
    jc89898  
       2019-05-29 18:01:39 +08:00   ❤️ 1
    你这 1600 个 commit 怎么感觉 80%都是 Update Document.md 哈哈
    Accat1024
        60
    Accat1024  
       2019-05-29 18:02:04 +08:00 via Android
    @TommyLemon 我可以这么理解吗? 所有 GET 请求都发送到 http://host:port/get, 然后通过 json 来描述我们通常项目用的接口?
    最近有一个项目,需要根据 sql 生成 json 并自动发布接口,希望参考一下,感谢。🙏🙏
    polebug
        61
    polebug  
       2019-05-29 18:20:37 +08:00 via Android
    更适合一个前端撸全栈的项目吧 其余的不管大项目小项目 前端应该不想管数据库吧 (不妨做个调查

    楼主挑战一般化开发模式 值得敬佩 但不一定被人接受
    TommyLemon
        62
    TommyLemon  
    OP
       2019-05-29 18:33:01 +08:00
    @jc89898 文档很重要,花了很多时间去编写和修改的,不过源码也一直在更新哈
    https://github.com/APIJSON/APIJSON/releases
    TommyLemon
        63
    TommyLemon  
    OP
       2019-05-29 18:37:45 +08:00
    @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"
    }
    ```
    TommyLemon
        64
    TommyLemon  
    OP
       2019-05-29 18:39:15 +08:00
    @TommyLemon 评论自动删除缩进(每行前面的空格)也是醉了,可以复制粘贴 请求 JSON 到
    APIJSONAuto 自动化接口管理平台来测试
    apijson.org
    TommyLemon
        65
    TommyLemon  
    OP
       2019-05-29 18:46:11 +08:00
    @polebug

    不需要前端管数据库的哦,那是后端的事情。后端把数据库建好,配置好 APIJSON 的数据库连接给前端调用。
    至于如何请求,后端把 URL 和请求 JSON 放到 APIJSONAuto 接口工具上传(提供源码可以部署到内网),
    前端就能在共享的测试用例列表里浏览和使用了。

    这种方式确实是在跳转传统的 RESTful 等开发方式,很多人不理解、不支持,但我还是一路坚持下来了。


    目前已经有多家企业在使用中,其中不乏营收过亿的企业(传音 2018 年 226 亿)和 融资上千万的企业(社保科技)
    https://github.com/APIJSON/APIJSON
    jk1030
        66
    jk1030  
       2019-05-29 18:47:57 +08:00
    也就简单项目能用下 对于领域对象有点要求的项目或者是分布式项目就是自杀吧 那么重的耦合度,除非是写了跑路别人维护
    peyppicp
        67
    peyppicp  
       2019-05-29 19:01:28 +08:00
    我有一个问题,如果我前端需要展示一个敏感的数据需要部分隐藏,比如身份证号,这个用你的项目怎么实现?如果前端加密的话根本不安全。抓个包就完蛋了。
    而且这种数据需要加密存储到数据库里,难道要在前端写秘钥吗?
    yuankui
        68
    yuankui  
       2019-05-29 19:23:06 +08:00
    秒天秒地,秒空气~
    allenhu
        69
    allenhu  
       2019-05-29 19:51:38 +08:00   ❤️ 1
    @TommyLemon 本来是要用来给前后端解耦的,这样一来,像 mask 某个字段(或者只有部分人能读取某个字段)这种很平常的场景,还是要后端来参与进来,那么,这个项目的意义是啥,造一个新轮子麻烦前后端双方?
    polebug
        70
    polebug  
       2019-05-29 19:52:43 +08:00
    @TommyLemon 我觉得你的想法是好的 但是现在这个项目刚起来 发帖介绍以及 github 不应该放过多的所谓的荣誉来证明这个项目有多好 应该多听听程序员们的想法 这样才能帮助项目变好不是吗
    skadi
        71
    skadi  
       2019-05-29 21:53:08 +08:00
    老哥又是你,我起码见了四五次呢.
    xiongbiao
        72
    xiongbiao  
       2019-05-29 22:01:10 +08:00
    害怕
    agee
        73
    agee  
       2019-05-29 22:22:38 +08:00 via iPhone
    这个项目看到过好多次,其中还有几次是 v 友推荐的,从推荐场景来说都还是挺不错的,但是作者一出来推广马上就有一种华为公关部的感觉,说真的,如果真的为项目好,不能一直负向宣传啊。虽然还没有用但是看理念还是可以的,如果能用好,个人小项目的话能节省不少时间,但是大项目就本身就不会为在这方面节省时间或者图方便而去使用这种框架,更多的考虑是系统化工业化。这估计这也是 v2 上的大老看不上的原因,这些都是很正常的啊,心态不平如何能静下来好好写代码呢。
    agee
        74
    agee  
       2019-05-29 22:27:46 +08:00 via iPhone
    开源也应该多少对自己目标用户有个定位,从作者的宣传来看,明显对于目标用户定位是错的,给人带来太多反感。
    zander1024
        75
    zander1024  
       2019-05-29 23:33:59 +08:00
    block ,病毒营销
    Bramblex2
        76
    Bramblex2  
       2019-05-29 23:49:10 +08:00
    项目是好项目……

    但是这个营销路子太野了,有一种 q 群大神的感觉。
    carlclone
        77
    carlclone  
       2019-05-30 08:12:40 +08:00 via Android
    像培训班出来的,哈哈
    murmur
        78
    murmur  
       2019-05-30 08:21:41 +08:00   ❤️ 1
    @1cming 我认为只要项目正规,测试覆盖完全,bug 修复即时,宣传一下也挺好的
    总靠着洋人的信仰选模块不行
    当年 vue 的作者还不是下知乎跟人对杠
    murmur
        79
    murmur  
       2019-05-30 08:22:44 +08:00
    @agee v2 大佬连现在连 react native 都看不上了,windows 更是人间之屑,所以你在乎什么?
    leonme
        80
    leonme  
       2019-05-30 08:25:04 +08:00 via Android
    看到大家这么喷我就放心了,哪有开源项目这么推广的
    luozic
        81
    luozic  
       2019-05-30 08:44:31 +08:00 via iPhone   ❤️ 1
    产品很不错,适用场景 /范围可以说清楚点
    omph
        82
    omph  
       2019-05-30 08:45:20 +08:00
    看测试界面和例子都感觉挺好的,一看楼主的宣传,反倒没信心了,用语非常情绪化,不像是个优秀程序员,缺少严谨务实的作风
    所以楼主如果真想做好推广,先要明确受众主要是开发群体,必须给人以专业化的印象,不然谁敢用?
    murmur
        83
    murmur  
       2019-05-30 08:57:41 +08:00
    @omph flutter 这种桌面端还是个梦都吹上天,楼主说一下自己的功能叫情绪化
    Ehco1996
        84
    Ehco1996  
       2019-05-30 08:58:07 +08:00
    所以能问下 cache 相关是怎么处理的? 如何主动更新?
    guoyang
        85
    guoyang  
       2019-05-30 08:58:15 +08:00
    不好意思,由于没有阅读源代码,我想知道数据存储是如何实现的,一个对象一张表吗,二是如何实现查询的高效,索引如何做的,因为你并不知道用户的查询语句,三是如果一个对象 1 亿条数据,该项目如何实现数据的高效存储和索引?谢谢
    guoyang
        86
    guoyang  
       2019-05-30 09:06:14 +08:00
    @TommyLemon 不好意思,我看了你的说明文档,还是得靠用户自己创建表,同时根据查询语句自己去创建对应的索引,这个过程如果你能够完美的解决,同时还能保证索引的高效和空间利用,那么我觉得你这个项目可以更上一个台阶。
    blindpirate
        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
    LemonCoo1
        88
    LemonCoo1  
       2019-05-30 09:18:46 +08:00
    @murmur 请问 flutter 有用 完爆这种言辞吗 楼主这项目可是完爆 hibernate 的哟 滑稽
    murmur
        89
    murmur  
       2019-05-30 09:21:18 +08:00
    提点意见
    1、缺少英文文档,所以楼上人觉得你 low,也没法给外语区推广
    2、缺少 benchmark,这东西我感觉企业开发不错,毕竟是看实现不看性能,但是想给互联网用别人对性能非常看重
    3、github 的标签有碰瓷嫌疑,swift、typescript、fastjson 这些关键字有点不相干,真的是为了蹭搜索热度么
    kylix
        90
    kylix  
       2019-05-30 09:25:29 +08:00
    呵呵。这种推广手法,,不管项目好不好,是不敢用的。
    murmur
        91
    murmur  
       2019-05-30 09:30:12 +08:00   ❤️ 1
    @LemonCoo1 我的意思是国内的很多开发者戴着有色眼镜看人,国外的框架刚出个 beta 就吹上天,前景无限锤打竞品
    国内出个什么框架就是罪无可恕,垃圾的一比,毫无竞争实力,给自己宣传一下都是罪恶
    当年 vue 出来的时候,拿作者就一个人不靠谱说事的人说了几年了
    苹果那种 xx 不通的中文叫苹果特色,楼主稍微夸张一点的语气叫情绪化,话不能这么说是吧
    什么时候能用事实说话,比如他性能不够,哪里有漏洞,哪个功能没实现就开始宣传,这才叫客观
    当然这楼主给的数据不够,我找了半天没看到 benchmark,那就应该疯狂拿数据打他脸对不对?
    phpfpm
        92
    phpfpm  
       2019-05-30 09:35:49 +08:00
    别的不说,您啥时候把您的站点的 ssl 弄上去?
    gccdchen
        93
    gccdchen  
       2019-05-30 09:43:55 +08:00
    建议:
    shenqi
        94
    shenqi  
       2019-05-30 09:45:30 +08:00
    感觉不错。
    gccdchen
        95
    gccdchen  
       2019-05-30 09:52:05 +08:00   ❤️ 2
    LZ 项目应该还是很有用的 .. 但是文档看得太累 , 与其撕逼不如修改下文档.
    营销气息太重啦

    建议:
    1, 文档顺序 , gitbook 格式 .
    第一点 , 先写作用,功能 (限制 10 行以内)
    第二点 , 快速上手 放项目 Readme.md , 越傻瓜越好 , 能用 maven/gradle 引入最好.需要启动就做成插件,或者命令行.最好 1 分钟能跑起来.
    至于奖项这些可以在 wiki 另开一页.不然别人觉得好大喜功.

    感谢 lz 付出
    shuax
        96
    shuax  
       2019-05-30 09:56:16 +08:00
    改变世界,再见!
    sxw11
        97
    sxw11  
       2019-05-30 10:01:43 +08:00   ❤️ 1
    emmm,原来在前端眼里后端真的只是 crud。。。准备了一对反驳的话都懒得说了,只想说楼主加油哟,楼主棒棒哟
    beidounanxizi
        98
    beidounanxizi  
       2019-05-30 10:11:51 +08:00 via iPhone
    评论比帖子精彩系列
    KickAssTonight
        99
    KickAssTonight  
       2019-05-30 10:33:09 +08:00
    感觉像是前端直接用 sql 语句去请求后端接口了,挺有意思的,但是感觉做中间层比较合适,放在前端不太安全。
    thisisgpy
        100
    thisisgpy  
       2019-05-30 10:33:43 +08:00
    最主要的是,码云那个证书并没有一毛钱作用。码云上的用户啥水平大家心里没点数么?
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1476 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 17:09 · PVG 01:09 · LAX 09:09 · JFK 12:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.