登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
代码拉取完成,页面将自动刷新
开源项目
>
WEB应用开发
>
Web开发框架
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
843
Star
6.7K
Fork
1.5K
GVP
腾讯开源
/
APIJSON
代码
Issues
66
Pull Requests
2
Wiki
统计
流水线
服务
JavaDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
常见问题与提问前必看
置顶
待办的
#I2B59L
TommyLemon
拥有者
创建于
2020-12-28 20:58
本 Issue 仅限作者维护,其他人不要回复。 如果你已经知道问题所在、怎么解决,请直接 [提交 Pull Request](https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md#%E5%85%B6%E4%B8%AD%E7%89%B9%E5%88%AB%E8%87%B4%E8%B0%A2-) 为社区做贡献,非常感谢。 开发者也是人,也需要工作、休息、恋爱、陪伴家人、走亲会友等,也有心情不好和身体病痛, 往往没有额外的时间精力顾及一些小问题,请理解和支持,开源要大家参与贡献才会更美好~ 少数个人的热情终有被耗尽的一天,只有大家共同建设和繁荣社区,才能让开源可持续发展! https://github.com/Tencent/APIJSON/issues/406 _________________________________ "APIJSON 支持/能 XX 吗?",例如 "支持全文检索吗?","支持连接池吗?", "能分库分表吗?", 问这类问题之前先想想这是不是 ORM 库或者说 SQL 的功能: 如果是那基本就支持,问之前自己先试试吧,没试出来再问; 如果不是,问问自己 "APIJSON 妨碍我用其它库实现这个需求吗?", APIJSON 良好的兼容性让这个问题几乎不会发生,基本随便找个热门的 分库分表/连接池 等库都能简单对接起来。 https://github.com/Tencent/APIJSON/issues/153 https://github.com/Tencent/APIJSON/issues/107 https://github.com/Tencent/APIJSON/issues/98 https://github.com/Tencent/APIJSON/issues/323 https://github.com/Tencent/APIJSON/issues/104 https://github.com/Tencent/APIJSON/issues/108 https://github.com/Tencent/APIJSON/issues/89 https://github.com/Tencent/APIJSON/issues/64 https://github.com/Tencent/APIJSON/issues/437 https://github.com/Tencent/APIJSON/issues/436 https://github.com/Tencent/APIJSON/issues/313 https://github.com/Tencent/APIJSON/issues/270 https://github.com/Tencent/APIJSON/issues/267 https://github.com/Tencent/APIJSON/issues/265 _________________________________ 1.尝试在 **下方常见问题** (快捷键 Ctrl/Command + F) 和 [历史问题](https://github.com/TommyLemon/APIJSON/issues?q=is%3Aissue) (Filters 输入框) 搜索答案。 2.尝试阅读 [通用文档](https://github.com/TommyLemon/APIJSON/blob/master/Document.md) 或看 [视频教程](https://search.bilibili.com/all?keyword=APIJSON) 找到答案。 3.尝试阅读 [Demo 示例代码](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoSQLConfig.java) 以找到答案。 4.尝试自己 [检查或试验](http://apijson.cn/api) 以找到答案。 5.尝试阅读 [源码和注释](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java) 以找到答案。 如果以上都尝试过了请提一个新的issue。 强烈推荐阅读 [提问的智慧-中国版](https://mp.weixin.qq.com/s/q461so9lWk4FKJGZ-p7Vcg)、[如何向开源社区提问题](https://github.com/seajs/seajs/issues/545)、[如何有效地报告 Bug](http://www.chiark.greenend.org.uk/~sgtatham/bugs-cn.html)、[如何向开源项目提交无法解答的问题](https://zhuanlan.zhihu.com/p/25795393) 和 [提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way),更好的问题更容易获得帮助。 <br /> **提 bug 请发请求和响应的【完整截屏】,没图或者 【不是全屏】的自行解决! 开发者有限的时间和精力主要放在【维护项目源码和文档】上! 【描述不详细】 或 【文档/常见问题 已有答案】 的问题直接拒绝!! 【态度 不文明/不友善】的可能会被拉黑,问题也不予解答!!!** 请求参数 JSON 中表名、字段名、关键词及对应的值都是大小写敏感、逗号敏感、分号敏感、空格敏感、换行敏感, 大部分情况都不允许空格和换行,表名以大写字母开头,不要想当然,请严格按照 设计规范 来调用 API #181 ### 常见问题 #### 0.为什么 Issue/QQ群/微信群 没人愿意回答你的问题? 文档/注释/常见问题已解答的重复提问、缺这少那没有足够的包括截屏在内的上下文信息、提问不礼貌态度不客气等。 **开发者时间精力有限,原则上优先解决 登记用户 和 贡献者 的问题,** **不解决 文档/视频/常见问题 已明确说明、描述简陋 或 态度无礼 的问题!** **如果你已经多次得到帮助,却仍然只索取不贡献,那就别指望大家再帮你!** **私聊作者请教技术问题 或者 频繁在互助群 @ 作者 可能会被拉黑/禁言/踢群,请尊重和理解,谢谢!** 如果你 [提 PR 登记了自己使用 APIJSON 的公司](https://github.com/Tencent/APIJSON/issues/187),可以加 **企业用户支持专群**,作者亲自且优先答疑, 作者只有解答完了这个专群里的全部问题,才看情况解答 Issue 里的问题(对 Issue 不保证解答、更不保证及时); 其它群为互助群,由于大多数问题 在文档/Issue 已有答案却反复提 或者 缺少必要信息要来来回回沟通问清细节 已浪费太多时间, 甚至有白嫖还把自己当大爷的自私自利伸手党输出情绪,作者不再解答互助群问题,由群友互助解答,建议未登记企业的用户 [填问卷](https://wj.qq.com/s2/10971431/2a09) 或 [提 Issue](https://github.com/Tencent/APIJSON/issues/36)。 如果你为 APIJSON 做出了以下任何一个贡献: [提交了 PR 且被合并](https://github.com/Tencent/APIJSON/pull/92)、[提交了优质 Issue](https://github.com/Tencent/APIJSON/issues/189)、[发表了优质文章](https://blog.csdn.net/qq_41829492/article/details/88670940)、[开发了可用的生态项目](https://github.com/zhangchunlin/uliweb-apijson), 可以在群里发出贡献链接并附带说明,管理员将设置关注你一段时间,优先答疑解惑。 互助群一般解答顺序:贡献者 > 帮助他人的群友 > 带企业名昵称 > 带岗位名昵称 > 其他群友。 QQ技术群2 开始 3 个数字(1,2,3位):734 #### 1.如何定制业务逻辑? 在后端编写 远程函数,可以拿到 session、version、当前 JSON 对象、参数名称 等,然后对查到的数据自定义处理 https://github.com/Tencent/APIJSON/issues/101 远程函数原理和使用详细讲解 https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#远程函数和-function-表 #### 2.如何控制权限? 在 Access 表配置校验规则,默认不允许访问,需要对 每张表、每种角色、每种操作 做相应的配置,粒度细分到行级 <br /> https://github.com/Tencent/APIJSON/issues/12 权限控制原理和使用详细讲解 https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#访问控制角色和-access-表 #### 3.如何校验参数? 在 Request 表配置校验规则 structure,提供 MUST、TYPE、VERIFY 等通用方法,可通过 远程函数 来完全自定义 <br /> https://github.com/Tencent/APIJSON/wiki#%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86 参数校验原理和使用详细讲解 https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#访问方法请求体与-request QQ技术群2 最后 3 个数字(7,8,9位):054 #### 4.如何生成文档? 用 APIAuto(https://github.com/TommyLemon/APIAuto) https://github.com/Tencent/APIJSON/issues/85 #### 5.如何 OR 或连接不同 key 对应的条件? 用对象关键词 @combine,例如 5.0.0+ 可以用 "@combine":"name~ | tag~" ,低于 5.0.0 只能用 "@combine":"name~,tag~" <br /> https://github.com/Tencent/APIJSON/issues/107 #### 6.登录后 增删改 报错未登录? 如果是自己的网页、小程序、客户端这样报错,一般是因为没有存取 Cookie,需要在登录成功后保存 Cookie 并在调其它接口时带上 https://gitee.com/Tencent/APIJSON/issues/I1JTYH <br /> 如果使用网页工具测试报错,则很可能是 Chrome 80+ 强制前端网页 JavaScript 跨域 same-site Cookie 的策略导致,可以改用 Postman 或修改 Chrome 设置。 https://github.com/Tencent/APIJSON/issues/166 <br /> 如果是用 APIAuto,可以设置服务器代理,如果在贵司内网,则必须在内网部署 APIJSONBoot 系列后端作为代理服务,具体见 APIAuto 常见问题 1.无法访问接口 https://github.com/TommyLemon/APIAuto#1%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E6%8E%A5%E5%8F%A3 也可以像 [APIJSONBoot-MultiDataSource](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource) 一样把 [APIAuto](https://github.com/TommyLemon/APIAuto) 的源码放到 [src/main/resources/static](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/resources/static) 目录, 再用浏览器打开本地主页 http://localhost:8080 然后把网页的 URL 输入框 改为 http://localhost:8080/login 托管服务器地址 URL 改为 http://localhost:8080 (注:假设本地服务端口为默认的 8080) <br /> #### 7.和 GraphQL 的区别 GraphQL 是用来聚合和过滤数据的网关,不提供增删改查功能; APIJSON 提供万能通用的增删改查 API,零代码实时实现各种简单的和复杂的需求(一对一、一对多、多对一、多对多任意关联,各种 JOIN、各种子查询及 JOIN 和子查询相互嵌套等) https://github.com/Tencent/APIJSON/issues/205 https://github.com/Tencent/APIJSON/issues/108#issuecomment-533003949 #### 8.和 Swagger, YApi 等接口工具的区别 APIJSON 不是文档工具、也不是测试工具,配套的 APIAuto 才是 HTTP 接口 的文档/测试工具 https://github.com/Tencent/APIJSON/issues/27 #### 9.和 Hiberante, JPA, JOOQ, Prisma, Sequelize, Linq 等其它 ORM 库的区别 只有 APIJSON 能做到不写任何代码,也不生成任何代码,直接零代码做到各种增删改查、各种结构嵌套、各种外键关联、各种条件与或非组合、各种 JOIN、各种子查询 等几乎所有 SQL 的功能,其它 ORM 库如果有做到零代码实现 APIJSON 1/10 [功能](https://github.com/Tencent/APIJSON/wiki#apijson%E7%9B%AE%E5%89%8D%E5%B7%B2%E5%AE%9E%E7%8E%B0) 的,请直接 [New issue](https://github.com/Tencent/APIJSON/issues/new/choose) 讨论。 https://github.com/Tencent/APIJSON/issues/29 #### 10.APIJSON 相比其它框架/库的优势? APIJSONBoot 对比 SSM/SSH 等开发效率可提升 20 倍以上 https://github.com/Tencent/APIJSON/issues/132 QQ技术群1 最后 3 个数字(7,8,9位):115 #### 11.如何使用自增主键 id?没有主键 id 怎么增删改? 删除和修改必须要有主键。 在没有主键的表新增记录 或者 在有主键的表使用自增主键, 可在 DemoSQLConfig static 代码块中重写 SIMPLE_CALLBACK 的 newId 方法,return null 即可 https://github.com/Tencent/APIJSON/issues/186 #### 12.如何自定义主键 id 名称?类型可以为 varchar 等字符串吗? DemoSQLConfig static 代码块中重写 SIMPLE_CALLBACK 的 getIdKey/getUserIdKey 方法 https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java 类型除了 int/bigint 等整数也可以为 varchar/char 等字符串,对应代码里的 Long 和 String https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L432-L458 #### 13.如何实现多数据源? 可以在 DemoSQLConfig 中根据 database, schema, table 或者其它方式来区分,给 getDBUri 返回不同的 uri https://github.com/Tencent/APIJSON/issues/148 #### 14.自己已经有一套鉴权系统了,不想用 APIJSON 的这套怎么办? DemoParser 重写 Parser 中的 isNeedVerifyLogin, isNeedVerifyRole, isNeedVerifyContent 来指定是否开关某个方面的校验 https://github.com/Tencent/APIJSON/blob/22ed7cc9e801f35158e85cf6adfa5c1243eb09c9/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java https://github.com/Tencent/APIJSON/issues/12#issuecomment-462603308 也可以使用或参考其他开发者贡献的鉴权方式 https://github.com/Tencent/APIJSON/issues/286 #### 15.如何自动插入 create_time, update_time, creator_id, is_deleted 之类的业务上全局通用字段? 可以用 远程函数 + 引用赋值 来针对某个特定业务(表)来实现。如果是通用字段,还可以在重写 DemoObjectParser 重写 newSQLConfig,把从 Controller 经过 DemoParser 传过来的 gmt_create, create_time, creator_id, is_deleted 等 put 进去。具体见 https://github.com/Tencent/APIJSON/issues/196 #### 16.如何集成到自己现有的项目? 在你用的框架类似 Demo [新增几个接口调用 DemoParser](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoController.java) 即可, [APIJSONController](https://github.com/APIJSON/apijson-framework/blob/master/src/main/java/apijson/framework/APIJSONController.java) 只是简单封装,可以不继承, 例如 JFinal 版 Demo 中的 [DemoController](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/jfinal/DemoController.java) 就没有继承它,而是继承 JFinal 的 Controller。 https://github.com/Tencent/APIJSON/issues/201#issuecomment-783991477 建议直接把 APIJSONDemo 的 DemoSQLConfig 和 DemoController 复制到自己项目,DemoApplication 合并到自己的 Application。 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo 也可以参考其他开发者贡献的 APIJSON Todo Demo (让 APIJSON 上手更简单一些的尝试) https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md #### 17.Demo 提供的表 SQL 文件很多,如果集成到自己项目,哪些表是必须的? Function(注册远程函数), Request(配置参数校验规则), Access(配置权限校验规则) https://github.com/APIJSON/APIJSON-Demo/tree/master/MySQL/single #### 18.如何一次性查全部数据/如何一次性查所有表记录?如何查询每页超过 100 条?如何查询超过 100 页?query:2 为什么不能查全部数据? 不支持,必须有最大数量限制前端传参 count 的值(count: 0 取最大值,不传则为默认值 Parser.getDefaultQueryCount),否则在数据量大的时候容易导致慢查询甚至拖垮数据库。 可在 DemoParser 重写 Parser.getMaxQueryCount 来指定最大查询数量,重写 Parser.getMaxQueryPage 来指定最大查询页码(从 0 开始)。 另外 query: 2 是指同时查数据和数量。 https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2 https://github.com/Tencent/APIJSON/issues/484 https://github.com/Tencent/APIJSON/issues/259 https://github.com/Tencent/APIJSON/issues/243 另外可以通过 ``` "@order":"id+", "id>": 列表最后一项的 id ``` 或 ``` "@order":"id-", "id<": 列表最后一项的 id ``` 这种方式来优化分页性能,并且绕过页码限制(实际可累计查询超过 10000 条 )。 #### 19.如何实现假删除/软删除/逻辑删除? 可以用 is_deleted int 字段标记是否已删除,调 /put 接口改掉 is_deleted 的值,然后查询时可以传 is_deleted 条件或参考以上问题 15 在后端统一自动插入 is_deleted 条件 https://github.com/Tencent/APIJSON/issues/301 #### 20.为什么引用赋值关联的副表查不到数据? 不在同一层级必须用 完整(绝对)路径,在熟悉前最好只用 完整(绝对)路径,不要偷懒省几个字符错用 缺省(相对)路径 https://github.com/Tencent/APIJSON/issues/335 QQ技术群2 中间 3 个数字(4,5,6位):652 #### 21.通用文档中的存储过程示例对应的 SQL 是? 根据 userId 查评论列表 ```sql DROP PROCEDURE IF EXISTS getCommentByUserId; DELIMITER // CREATE PROCEDURE getCommentByUserId(IN id bigint, IN limit_ int, IN offset_ int) BEGIN SELECT * FROM sys.Comment WHERE userId = id LIMIT limit_ OFFSET offset_; END // DELIMITER ; SHOW PROCEDURE STATUS; CALL sys.getCommentByUserId(82001, 10, 0); ``` 获取所有产品 ```sql DROP PROCEDURE IF EXISTS getAllProducts; DELIMITER // CREATE PROCEDURE getAllProducts() BEGIN SELECT * FROM sys.Comment LIMIT 1; END // DELIMITER ; SHOW PROCEDURE STATUS; CALL sys.getAllProducts(); ``` 判断是否包含 ```sql DROP PROCEDURE IF EXISTS isContain; DELIMITER // CREATE PROCEDURE isContain(IN array text, IN val int) BEGIN SELECT json_contains(array,val); END // DELIMITER ; SHOW PROCEDURE STATUS; CALL sys.isContain('[82001,82002,82003]','82001'); ``` #### 22.APIJSON 是否支持微服务框架?支持哪些微服务框架?如何接入? 当然支持。有哪个微服务框架不支持 ORM 库这种基础组件?这个问题就像问 日志框架是否支持微服务、数据库是否支持微服务一样。 和单体服务用法一样,在需要用到的微服务里依赖和配置 APIJSON 即可。 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server #### 23.APIJSON 除了 HTTP+JSON 是否还支持 RPC 框架(基于 Protobuf 协议的 GRPC,基于 Thrift 协议的 Thrift 等)? 支持。例如 GRPC 基于 Protobuf 协议,IDL 内字段是通过编码固定死的,所以不能像 JSON 一样灵活,但仍然可以提供一个 string 类型字段来传输 APIJSON 的 JSON 格式字符串(请求参数、返回结果)。Thrift, BRPC 等同理。 应该没有哪个是网络层传输框架不支持 APIJSON,除非某框架不支持前后端传输字符串,但这个显然不符合逻辑,连字符串这个最基本的类型都不支持传输,谁还会用? #### 24.APIJSON 性能(执行效率)表现怎么样?能否达到手写 SQL 的效率? 就像 Java 的 GC 自动垃圾回收相对于 C/C++ 手动管理内存一样,ORM 相对手写 SQL 提高了下限,也拉低了上限。 APIJSON 做了预编译、前置主键条件、前置 AND 条件、字段限制(可选)、多级缓存、查询预判、读写限流 等大量性能优化, 一般生成的 SQL 执行效率在中级工程师手写优化 SQL 的水平。 https://github.com/Tencent/APIJSON/issues/16 腾讯业务百万数据 6s 响应,APIJSON 性能优化背后的故事 https://zhuanlan.zhihu.com/p/447844661 另外做性能测试或上线生产环境前先 Log.DEBUG = false 关掉日志! #### 25.APIJSON 支持缓存吗?支持哪些缓存框架/库?如何接入? APIJSON 原生支持后端的数据库缓存(MySQL, PostgreSQL 等可控制 SQL_NO_CACHE 参数),原生支持 HashMap 和 ArrayList 内存缓存,支持第三方内存缓存(Redis, Tendis, Memcached, Ehcache 等), 当然通过 HTTP 协议等也支持网络缓存,通过客户端各种 SDK/ HTTP 框架或库也支持客户端内存缓存、磁盘缓存等。 想问下cache的部分基于什么实现的? https://github.com/Tencent/APIJSON/issues/146 APIJSON 怎么很好的跟分布式缓存结合呢? https://github.com/Tencent/APIJSON/issues/90 QQ技术群1 中间 3 个数字(4,5,6位):020 #### 26.APIJSON 支持哪些数据库?是否支持 MongoDB 等非关系型数据库? APIJSON 原生支持的数据库及版本都已在首页顶部列出 https://github.com/Tencent/APIJSON#--apijson  包括但不限于 MySQL 5.7+, PostgreSQL 9.5+, MS SQLServer 2012+, Oracle 12C+, IBM DB2 7.1+, TiDB 2.1+, ClickHouse 21.1+, Hive 3.1.2+, Hadoop 3.1.3+ 理论上所有支持 SQL 与 JDBC/ODBC 的软件,都可以用本项目对接 CRUD,待测试: [Elasticsearch](https://www.elastic.co/cn/what-is/elasticsearch-sql), [OceanBase](https://www.oceanbase.com/docs/oceanbase/V2.2.50/ss-sr-select_daur3l), [Presto](https://prestodb.io/docs/current/admin/function-namespace-managers.html), [Spark](http://spark.apache.org/sql/),[Phoenix](http://phoenix.apache.org/language/index.html#select)(延伸支持 HBase), [Presto/Trino](https://prestodb.io/docs/current/sql/select.html)[](https://github.com/Tencent/APIJSON#%E6%88%91%E8%A6%81%E8%B5%9E%E8%B5%8F)(延伸支持 Redis, Hive, Kafka, Elasticsearch, Thrift, Cassandra, MySQL, PostgreSQL, Oracle, MongoDB...) 目前 APIJSON 专注于 MySQL, PostgreSQL 等关系型数据库,暂时不提供原生支持 MongoDB 等非关系型数据库。 非原生支持的数据库(如 Redis 等内存数据库,MongoDB 等非关系型数据库)也可以通过重写 SQLConfig, SQLExecutor 等相关方法来接入。参考以上 25.APIJSON 支持缓存吗? #### 27.APIJSON 支持哪些编程语言?哪些后端(服务端)、前端(终端、客户端)? APIJSON 目前提供实现的编程语言及前后端都已在首页顶部列出 https://github.com/Tencent/APIJSON#--apijson  支持的后端编程语言及版本包括但不限于 Java 1.8+, Go 1.16+, CSharp 2.1+, PHP 8.0+, Node.js ES6+, Python 3.0+ 前端支持浏览器网页、PWA、SPA、微信等各家小程序、Android 客户端、iOS 客户端、Windows 客户端、macOS 客户端 以及几乎所有能运行在浏览器/终端(手机、平板、电脑、服务器、智能家居、嵌入式、机器人等)设备 并且能够发起网络请求和接收回包结果的编程语言,包括但不限于 Python, C, Java, C++, C#, Visual Basic, JavaScript, PHP, Assembly language, Go, Swift, R, MATLAB, Delphi, Object Pascal, Ruby, Objective-C, Perl, Groovy, Rust, Dart, Kotlin, Lua, Julia, Prolog, Lisp, D, Scala, TypeScript, VBScript, PowerShell, Haskell, Clojure #### 28.APIJSON 支持全文检索/全文搜索/全文索引吗? 原生支持 MySQL 等数据库的 https://github.com/Tencent/APIJSON/issues/265 如果是 Elasticsearch,可能支持,试试 elasticsearch-sql https://www.elastic.co/cn/what-is/elasticsearch-sql #### 29.修改了 Access/Request/Function/Document 表配置后如何生效? 重启项目,或者调用 /reload 接口,具体见 [DemoController.reload](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/boot/DemoController.java#L392-L409) 方法注释 #### 30.APIJSON 支持上传、下载文件(Excel、图片、音视频等)吗? 不支持,APIJSON 是专为数据库表记录增删改查的 ORM 库,不要拿着锤子就看什么都觉得是钉子。 https://github.com/Tencent/APIJSON/issues/108 https://github.com/Tencent/APIJSON/issues/298 https://github.com/Tencent/APIJSON/issues/323 虽然可以通过 [远程函数](https://github.com/Tencent/APIJSON/issues/101) 或 重写方法 等来写代码自定义实现扩展,但大部分情况下使用其它方案更简单方便, 网上搜索 "[SpringBoot 上传文件](https://www.google.com/search?q=SpringBoot+%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6)" 等就有一大堆现成的成熟方案,其它同理,举一反三。 APIJSON 对各种库、框架的兼容性很好,几乎没有不兼容的,基本不用担心配合其它项目使用会有问题。 #### 31.在哪查看各种功能对应请求参数的 Demo 示例? 除了通用文档的 60 多个带测试链接的各种例子 https://github.com/Tencent/APIJSON/blob/master/Document.md     配套的接口工具 APIAuto 上两百个左右例子也多看看 http://apijson.cn/api 账号及密码 13000082001/123456  账号及密码 13000088888/123456  #### 32.Maven/Gradle 等远程依赖下载/同步不了 APIJSON, apijson-framework 等相关依赖库怎么办? 先检查仓库源是否有 jitpack.io,没有就加上,[Demo 里都是有的](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/pom.xml#L79-L86),可以直接复制粘贴,然后 sync。 如果已有还是不行,开 VPN 网络代理试试,可以先打开 youtube.com/google.com 等网站验证 VPN 是否可用。 再不行就注释相关依赖,直接改用依赖本地 jar 包,最近发布的每个 release 的 Assets 都有相关文件: https://github.com/APIJSON/APIJSON-Demo/releases 例如 APIJSONBoot 的 libs 目录就是添加了本地 jar 包,作为备选依赖方式 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot/libs 相关 issue: https://github.com/APIJSON/APIJSON-Demo/issues/21 https://github.com/APIJSON/APIJSON-Demo/issues/11 https://github.com/Tencent/APIJSON/issues/220 https://github.com/Tencent/APIJSON/issues/171 <br /> #### 33.前端是否需要了解表结构、关联关系、业务逻辑等?推荐的前后端接口对接方式是? 不需要。后端把请求 URL 和 JSON 提供给前端即可,这点和传统方式差不多,推荐用 APIAuto 上传,也可以用 YApi, Postman 等其它接口管理工具。 <img width="1275" alt="image" src="https://user-images.githubusercontent.com/5738175/183906302-5a4f33a4-0c3b-4779-b4c7-a95a4e152f33.png"> <img width="1279" alt="image" src="https://user-images.githubusercontent.com/5738175/183906617-8b139554-6b4b-4931-b072-8e5cf7ac5532.png"> http://apijson.cn/api #### 34.学习和使用 APIJSON 需要达到什么样的技术水平?熟悉哪些相关的知识? 需要达到实习生的技术水平,如果是高校学生需要拿到实习 Offer,如果是社会人员需要能拿到社招 Offer。 首先前后端都要熟悉 HTTP 协议 和 JSON 协议,熟悉 APIAuto/Postman/YApi/Rap 等任意一个 HTTP 测试工具,另外 #### 对于后端 * **1.熟悉 MySQL/PostgreSQL 或其它数据库的安装、建表、数据记录读写** * **2.对应数据库 SQL 语言/方言的使用** * **3.对应后端语言及 IDE 的使用** 例如 Java 用 InteliJ IDEA/Eclipse,Go 用 Goland,C# 用 Visual Studio, PHP 用 PHPStorm, Python 用 PyCharm 等, Node.js 用 WebStorm/VS Code 等 * **4.JDBC 驱动的接入** 如果是 Java 或其他 JVM 语言,则 Maven 依赖必须,其次最好了解 Gradle/Jar/源码 依赖。 C#(NuGet), Go(import), JavaScript(NPM), PHP(Composer), TypeScript(NPM) 等其它语言见各自的库依赖/包管理方式。 * **5.掌握 Web 框架** 例如 Java 的 SpringBoot 或 JFinal, Go 的原生网络库或 Gin/GoFrame 等第三方 Web 框架, Node.js 的 Koa 或 Express 等 * **6.掌握 APIJSON 规范** #### 对于前端 * **1.熟悉前端(客户端)编程语言及 IDE 的使用** 例如 JavaSccript/TypeScript 用 WebStorm/VS Code,Android Java/Kotlin 用 Android Studio,iOS Objective C/Swift 用 XCode 等 * **2.会使用对应前端语言及相关网络请求库对 HTTP API 发起 POST application/json 的请求并解析 JSON 结果** 例如 Axios, Ajax 等 **如果连这种基本要求都达不到,那就先不要用 APIJSON,先学好基础再来!** #### 35.如何使用 SpringBoot 的 application.yml 或 application.properties 来配置数据库账号及密码?为什么 APIJSON 并发下返回数据错误,和数据库实际表记录行的值对不上? **APIJSON 的所有解析类的实例都不能复用,全部由 APIJSONORM 或 apijson-framework 等扩展项目管理!** **不要用 @Conponent/@Configuration/@Service 等注解在 Parser/ObjectParser/SQLConfig/SQLExecutor 等 APIJSON ORM 库的任何类及它们的任何子类!** 如果想用 SpringBoot 的 application.yml 或 application.properties 来配置 https://www.google.com/search?q=%22springboot%22+AND+%22%E8%8E%B7%E5%8F%96%22+AND+%22%E9%85%8D%E7%BD%AE%22&oq=%22springboot%22+AND+%22%E8%8E%B7%E5%8F%96%22+AND+%22%E9%85%8D%E7%BD%AE%22&aqs=chrome..69i57j0i546j0i30i546.21445j0j7&sourceid=chrome&ie=UTF-8 则可以用以下任意一个方式 1.environment.getProperty https://www.google.com/search?q=%22springboot%22+AND+%22environment.getProperty%22 2.PropertiesLoaderUtils.loadAllProperties https://www.google.com/search?q=%22springboot%22+AND+%22PropertiesLoaderUtils.loadAllProperties%22 3.单独新建一个类 ```java @Component @ConfigurationProperties public class Config { public static String dbAccount; @Value("${mysql.account}") public void setDbAccount(String account) { dbAccount = account; } } ``` 然后再引用对应的值 ```java public class DemoSQLConfig extends APIJSONSQLConfig { public String getDBAccount() { return Config.dbAccount; } } ``` https://gitee.com/Tencent/APIJSON/issues/I5LWSH #### 其它问题见 Closed Issues https://github.com/Tencent/APIJSON/issues?q=is%3Aissue+is%3Aclosed <br />
本 Issue 仅限作者维护,其他人不要回复。 如果你已经知道问题所在、怎么解决,请直接 [提交 Pull Request](https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md#%E5%85%B6%E4%B8%AD%E7%89%B9%E5%88%AB%E8%87%B4%E8%B0%A2-) 为社区做贡献,非常感谢。 开发者也是人,也需要工作、休息、恋爱、陪伴家人、走亲会友等,也有心情不好和身体病痛, 往往没有额外的时间精力顾及一些小问题,请理解和支持,开源要大家参与贡献才会更美好~ 少数个人的热情终有被耗尽的一天,只有大家共同建设和繁荣社区,才能让开源可持续发展! https://github.com/Tencent/APIJSON/issues/406 _________________________________ "APIJSON 支持/能 XX 吗?",例如 "支持全文检索吗?","支持连接池吗?", "能分库分表吗?", 问这类问题之前先想想这是不是 ORM 库或者说 SQL 的功能: 如果是那基本就支持,问之前自己先试试吧,没试出来再问; 如果不是,问问自己 "APIJSON 妨碍我用其它库实现这个需求吗?", APIJSON 良好的兼容性让这个问题几乎不会发生,基本随便找个热门的 分库分表/连接池 等库都能简单对接起来。 https://github.com/Tencent/APIJSON/issues/153 https://github.com/Tencent/APIJSON/issues/107 https://github.com/Tencent/APIJSON/issues/98 https://github.com/Tencent/APIJSON/issues/323 https://github.com/Tencent/APIJSON/issues/104 https://github.com/Tencent/APIJSON/issues/108 https://github.com/Tencent/APIJSON/issues/89 https://github.com/Tencent/APIJSON/issues/64 https://github.com/Tencent/APIJSON/issues/437 https://github.com/Tencent/APIJSON/issues/436 https://github.com/Tencent/APIJSON/issues/313 https://github.com/Tencent/APIJSON/issues/270 https://github.com/Tencent/APIJSON/issues/267 https://github.com/Tencent/APIJSON/issues/265 _________________________________ 1.尝试在 **下方常见问题** (快捷键 Ctrl/Command + F) 和 [历史问题](https://github.com/TommyLemon/APIJSON/issues?q=is%3Aissue) (Filters 输入框) 搜索答案。 2.尝试阅读 [通用文档](https://github.com/TommyLemon/APIJSON/blob/master/Document.md) 或看 [视频教程](https://search.bilibili.com/all?keyword=APIJSON) 找到答案。 3.尝试阅读 [Demo 示例代码](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoSQLConfig.java) 以找到答案。 4.尝试自己 [检查或试验](http://apijson.cn/api) 以找到答案。 5.尝试阅读 [源码和注释](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java) 以找到答案。 如果以上都尝试过了请提一个新的issue。 强烈推荐阅读 [提问的智慧-中国版](https://mp.weixin.qq.com/s/q461so9lWk4FKJGZ-p7Vcg)、[如何向开源社区提问题](https://github.com/seajs/seajs/issues/545)、[如何有效地报告 Bug](http://www.chiark.greenend.org.uk/~sgtatham/bugs-cn.html)、[如何向开源项目提交无法解答的问题](https://zhuanlan.zhihu.com/p/25795393) 和 [提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way),更好的问题更容易获得帮助。 <br /> **提 bug 请发请求和响应的【完整截屏】,没图或者 【不是全屏】的自行解决! 开发者有限的时间和精力主要放在【维护项目源码和文档】上! 【描述不详细】 或 【文档/常见问题 已有答案】 的问题直接拒绝!! 【态度 不文明/不友善】的可能会被拉黑,问题也不予解答!!!** 请求参数 JSON 中表名、字段名、关键词及对应的值都是大小写敏感、逗号敏感、分号敏感、空格敏感、换行敏感, 大部分情况都不允许空格和换行,表名以大写字母开头,不要想当然,请严格按照 设计规范 来调用 API #181 ### 常见问题 #### 0.为什么 Issue/QQ群/微信群 没人愿意回答你的问题? 文档/注释/常见问题已解答的重复提问、缺这少那没有足够的包括截屏在内的上下文信息、提问不礼貌态度不客气等。 **开发者时间精力有限,原则上优先解决 登记用户 和 贡献者 的问题,** **不解决 文档/视频/常见问题 已明确说明、描述简陋 或 态度无礼 的问题!** **如果你已经多次得到帮助,却仍然只索取不贡献,那就别指望大家再帮你!** **私聊作者请教技术问题 或者 频繁在互助群 @ 作者 可能会被拉黑/禁言/踢群,请尊重和理解,谢谢!** 如果你 [提 PR 登记了自己使用 APIJSON 的公司](https://github.com/Tencent/APIJSON/issues/187),可以加 **企业用户支持专群**,作者亲自且优先答疑, 作者只有解答完了这个专群里的全部问题,才看情况解答 Issue 里的问题(对 Issue 不保证解答、更不保证及时); 其它群为互助群,由于大多数问题 在文档/Issue 已有答案却反复提 或者 缺少必要信息要来来回回沟通问清细节 已浪费太多时间, 甚至有白嫖还把自己当大爷的自私自利伸手党输出情绪,作者不再解答互助群问题,由群友互助解答,建议未登记企业的用户 [填问卷](https://wj.qq.com/s2/10971431/2a09) 或 [提 Issue](https://github.com/Tencent/APIJSON/issues/36)。 如果你为 APIJSON 做出了以下任何一个贡献: [提交了 PR 且被合并](https://github.com/Tencent/APIJSON/pull/92)、[提交了优质 Issue](https://github.com/Tencent/APIJSON/issues/189)、[发表了优质文章](https://blog.csdn.net/qq_41829492/article/details/88670940)、[开发了可用的生态项目](https://github.com/zhangchunlin/uliweb-apijson), 可以在群里发出贡献链接并附带说明,管理员将设置关注你一段时间,优先答疑解惑。 互助群一般解答顺序:贡献者 > 帮助他人的群友 > 带企业名昵称 > 带岗位名昵称 > 其他群友。 QQ技术群2 开始 3 个数字(1,2,3位):734 #### 1.如何定制业务逻辑? 在后端编写 远程函数,可以拿到 session、version、当前 JSON 对象、参数名称 等,然后对查到的数据自定义处理 https://github.com/Tencent/APIJSON/issues/101 远程函数原理和使用详细讲解 https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#远程函数和-function-表 #### 2.如何控制权限? 在 Access 表配置校验规则,默认不允许访问,需要对 每张表、每种角色、每种操作 做相应的配置,粒度细分到行级 <br /> https://github.com/Tencent/APIJSON/issues/12 权限控制原理和使用详细讲解 https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#访问控制角色和-access-表 #### 3.如何校验参数? 在 Request 表配置校验规则 structure,提供 MUST、TYPE、VERIFY 等通用方法,可通过 远程函数 来完全自定义 <br /> https://github.com/Tencent/APIJSON/wiki#%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86 参数校验原理和使用详细讲解 https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#访问方法请求体与-request QQ技术群2 最后 3 个数字(7,8,9位):054 #### 4.如何生成文档? 用 APIAuto(https://github.com/TommyLemon/APIAuto) https://github.com/Tencent/APIJSON/issues/85 #### 5.如何 OR 或连接不同 key 对应的条件? 用对象关键词 @combine,例如 5.0.0+ 可以用 "@combine":"name~ | tag~" ,低于 5.0.0 只能用 "@combine":"name~,tag~" <br /> https://github.com/Tencent/APIJSON/issues/107 #### 6.登录后 增删改 报错未登录? 如果是自己的网页、小程序、客户端这样报错,一般是因为没有存取 Cookie,需要在登录成功后保存 Cookie 并在调其它接口时带上 https://gitee.com/Tencent/APIJSON/issues/I1JTYH <br /> 如果使用网页工具测试报错,则很可能是 Chrome 80+ 强制前端网页 JavaScript 跨域 same-site Cookie 的策略导致,可以改用 Postman 或修改 Chrome 设置。 https://github.com/Tencent/APIJSON/issues/166 <br /> 如果是用 APIAuto,可以设置服务器代理,如果在贵司内网,则必须在内网部署 APIJSONBoot 系列后端作为代理服务,具体见 APIAuto 常见问题 1.无法访问接口 https://github.com/TommyLemon/APIAuto#1%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E6%8E%A5%E5%8F%A3 也可以像 [APIJSONBoot-MultiDataSource](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource) 一样把 [APIAuto](https://github.com/TommyLemon/APIAuto) 的源码放到 [src/main/resources/static](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/resources/static) 目录, 再用浏览器打开本地主页 http://localhost:8080 然后把网页的 URL 输入框 改为 http://localhost:8080/login 托管服务器地址 URL 改为 http://localhost:8080 (注:假设本地服务端口为默认的 8080) <br /> #### 7.和 GraphQL 的区别 GraphQL 是用来聚合和过滤数据的网关,不提供增删改查功能; APIJSON 提供万能通用的增删改查 API,零代码实时实现各种简单的和复杂的需求(一对一、一对多、多对一、多对多任意关联,各种 JOIN、各种子查询及 JOIN 和子查询相互嵌套等) https://github.com/Tencent/APIJSON/issues/205 https://github.com/Tencent/APIJSON/issues/108#issuecomment-533003949 #### 8.和 Swagger, YApi 等接口工具的区别 APIJSON 不是文档工具、也不是测试工具,配套的 APIAuto 才是 HTTP 接口 的文档/测试工具 https://github.com/Tencent/APIJSON/issues/27 #### 9.和 Hiberante, JPA, JOOQ, Prisma, Sequelize, Linq 等其它 ORM 库的区别 只有 APIJSON 能做到不写任何代码,也不生成任何代码,直接零代码做到各种增删改查、各种结构嵌套、各种外键关联、各种条件与或非组合、各种 JOIN、各种子查询 等几乎所有 SQL 的功能,其它 ORM 库如果有做到零代码实现 APIJSON 1/10 [功能](https://github.com/Tencent/APIJSON/wiki#apijson%E7%9B%AE%E5%89%8D%E5%B7%B2%E5%AE%9E%E7%8E%B0) 的,请直接 [New issue](https://github.com/Tencent/APIJSON/issues/new/choose) 讨论。 https://github.com/Tencent/APIJSON/issues/29 #### 10.APIJSON 相比其它框架/库的优势? APIJSONBoot 对比 SSM/SSH 等开发效率可提升 20 倍以上 https://github.com/Tencent/APIJSON/issues/132 QQ技术群1 最后 3 个数字(7,8,9位):115 #### 11.如何使用自增主键 id?没有主键 id 怎么增删改? 删除和修改必须要有主键。 在没有主键的表新增记录 或者 在有主键的表使用自增主键, 可在 DemoSQLConfig static 代码块中重写 SIMPLE_CALLBACK 的 newId 方法,return null 即可 https://github.com/Tencent/APIJSON/issues/186 #### 12.如何自定义主键 id 名称?类型可以为 varchar 等字符串吗? DemoSQLConfig static 代码块中重写 SIMPLE_CALLBACK 的 getIdKey/getUserIdKey 方法 https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java 类型除了 int/bigint 等整数也可以为 varchar/char 等字符串,对应代码里的 Long 和 String https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L432-L458 #### 13.如何实现多数据源? 可以在 DemoSQLConfig 中根据 database, schema, table 或者其它方式来区分,给 getDBUri 返回不同的 uri https://github.com/Tencent/APIJSON/issues/148 #### 14.自己已经有一套鉴权系统了,不想用 APIJSON 的这套怎么办? DemoParser 重写 Parser 中的 isNeedVerifyLogin, isNeedVerifyRole, isNeedVerifyContent 来指定是否开关某个方面的校验 https://github.com/Tencent/APIJSON/blob/22ed7cc9e801f35158e85cf6adfa5c1243eb09c9/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java https://github.com/Tencent/APIJSON/issues/12#issuecomment-462603308 也可以使用或参考其他开发者贡献的鉴权方式 https://github.com/Tencent/APIJSON/issues/286 #### 15.如何自动插入 create_time, update_time, creator_id, is_deleted 之类的业务上全局通用字段? 可以用 远程函数 + 引用赋值 来针对某个特定业务(表)来实现。如果是通用字段,还可以在重写 DemoObjectParser 重写 newSQLConfig,把从 Controller 经过 DemoParser 传过来的 gmt_create, create_time, creator_id, is_deleted 等 put 进去。具体见 https://github.com/Tencent/APIJSON/issues/196 #### 16.如何集成到自己现有的项目? 在你用的框架类似 Demo [新增几个接口调用 DemoParser](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoController.java) 即可, [APIJSONController](https://github.com/APIJSON/apijson-framework/blob/master/src/main/java/apijson/framework/APIJSONController.java) 只是简单封装,可以不继承, 例如 JFinal 版 Demo 中的 [DemoController](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONFinal/src/main/java/apijson/jfinal/DemoController.java) 就没有继承它,而是继承 JFinal 的 Controller。 https://github.com/Tencent/APIJSON/issues/201#issuecomment-783991477 建议直接把 APIJSONDemo 的 DemoSQLConfig 和 DemoController 复制到自己项目,DemoApplication 合并到自己的 Application。 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo 也可以参考其他开发者贡献的 APIJSON Todo Demo (让 APIJSON 上手更简单一些的尝试) https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md #### 17.Demo 提供的表 SQL 文件很多,如果集成到自己项目,哪些表是必须的? Function(注册远程函数), Request(配置参数校验规则), Access(配置权限校验规则) https://github.com/APIJSON/APIJSON-Demo/tree/master/MySQL/single #### 18.如何一次性查全部数据/如何一次性查所有表记录?如何查询每页超过 100 条?如何查询超过 100 页?query:2 为什么不能查全部数据? 不支持,必须有最大数量限制前端传参 count 的值(count: 0 取最大值,不传则为默认值 Parser.getDefaultQueryCount),否则在数据量大的时候容易导致慢查询甚至拖垮数据库。 可在 DemoParser 重写 Parser.getMaxQueryCount 来指定最大查询数量,重写 Parser.getMaxQueryPage 来指定最大查询页码(从 0 开始)。 另外 query: 2 是指同时查数据和数量。 https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2 https://github.com/Tencent/APIJSON/issues/484 https://github.com/Tencent/APIJSON/issues/259 https://github.com/Tencent/APIJSON/issues/243 另外可以通过 ``` "@order":"id+", "id>": 列表最后一项的 id ``` 或 ``` "@order":"id-", "id<": 列表最后一项的 id ``` 这种方式来优化分页性能,并且绕过页码限制(实际可累计查询超过 10000 条 )。 #### 19.如何实现假删除/软删除/逻辑删除? 可以用 is_deleted int 字段标记是否已删除,调 /put 接口改掉 is_deleted 的值,然后查询时可以传 is_deleted 条件或参考以上问题 15 在后端统一自动插入 is_deleted 条件 https://github.com/Tencent/APIJSON/issues/301 #### 20.为什么引用赋值关联的副表查不到数据? 不在同一层级必须用 完整(绝对)路径,在熟悉前最好只用 完整(绝对)路径,不要偷懒省几个字符错用 缺省(相对)路径 https://github.com/Tencent/APIJSON/issues/335 QQ技术群2 中间 3 个数字(4,5,6位):652 #### 21.通用文档中的存储过程示例对应的 SQL 是? 根据 userId 查评论列表 ```sql DROP PROCEDURE IF EXISTS getCommentByUserId; DELIMITER // CREATE PROCEDURE getCommentByUserId(IN id bigint, IN limit_ int, IN offset_ int) BEGIN SELECT * FROM sys.Comment WHERE userId = id LIMIT limit_ OFFSET offset_; END // DELIMITER ; SHOW PROCEDURE STATUS; CALL sys.getCommentByUserId(82001, 10, 0); ``` 获取所有产品 ```sql DROP PROCEDURE IF EXISTS getAllProducts; DELIMITER // CREATE PROCEDURE getAllProducts() BEGIN SELECT * FROM sys.Comment LIMIT 1; END // DELIMITER ; SHOW PROCEDURE STATUS; CALL sys.getAllProducts(); ``` 判断是否包含 ```sql DROP PROCEDURE IF EXISTS isContain; DELIMITER // CREATE PROCEDURE isContain(IN array text, IN val int) BEGIN SELECT json_contains(array,val); END // DELIMITER ; SHOW PROCEDURE STATUS; CALL sys.isContain('[82001,82002,82003]','82001'); ``` #### 22.APIJSON 是否支持微服务框架?支持哪些微服务框架?如何接入? 当然支持。有哪个微服务框架不支持 ORM 库这种基础组件?这个问题就像问 日志框架是否支持微服务、数据库是否支持微服务一样。 和单体服务用法一样,在需要用到的微服务里依赖和配置 APIJSON 即可。 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server #### 23.APIJSON 除了 HTTP+JSON 是否还支持 RPC 框架(基于 Protobuf 协议的 GRPC,基于 Thrift 协议的 Thrift 等)? 支持。例如 GRPC 基于 Protobuf 协议,IDL 内字段是通过编码固定死的,所以不能像 JSON 一样灵活,但仍然可以提供一个 string 类型字段来传输 APIJSON 的 JSON 格式字符串(请求参数、返回结果)。Thrift, BRPC 等同理。 应该没有哪个是网络层传输框架不支持 APIJSON,除非某框架不支持前后端传输字符串,但这个显然不符合逻辑,连字符串这个最基本的类型都不支持传输,谁还会用? #### 24.APIJSON 性能(执行效率)表现怎么样?能否达到手写 SQL 的效率? 就像 Java 的 GC 自动垃圾回收相对于 C/C++ 手动管理内存一样,ORM 相对手写 SQL 提高了下限,也拉低了上限。 APIJSON 做了预编译、前置主键条件、前置 AND 条件、字段限制(可选)、多级缓存、查询预判、读写限流 等大量性能优化, 一般生成的 SQL 执行效率在中级工程师手写优化 SQL 的水平。 https://github.com/Tencent/APIJSON/issues/16 腾讯业务百万数据 6s 响应,APIJSON 性能优化背后的故事 https://zhuanlan.zhihu.com/p/447844661 另外做性能测试或上线生产环境前先 Log.DEBUG = false 关掉日志! #### 25.APIJSON 支持缓存吗?支持哪些缓存框架/库?如何接入? APIJSON 原生支持后端的数据库缓存(MySQL, PostgreSQL 等可控制 SQL_NO_CACHE 参数),原生支持 HashMap 和 ArrayList 内存缓存,支持第三方内存缓存(Redis, Tendis, Memcached, Ehcache 等), 当然通过 HTTP 协议等也支持网络缓存,通过客户端各种 SDK/ HTTP 框架或库也支持客户端内存缓存、磁盘缓存等。 想问下cache的部分基于什么实现的? https://github.com/Tencent/APIJSON/issues/146 APIJSON 怎么很好的跟分布式缓存结合呢? https://github.com/Tencent/APIJSON/issues/90 QQ技术群1 中间 3 个数字(4,5,6位):020 #### 26.APIJSON 支持哪些数据库?是否支持 MongoDB 等非关系型数据库? APIJSON 原生支持的数据库及版本都已在首页顶部列出 https://github.com/Tencent/APIJSON#--apijson  包括但不限于 MySQL 5.7+, PostgreSQL 9.5+, MS SQLServer 2012+, Oracle 12C+, IBM DB2 7.1+, TiDB 2.1+, ClickHouse 21.1+, Hive 3.1.2+, Hadoop 3.1.3+ 理论上所有支持 SQL 与 JDBC/ODBC 的软件,都可以用本项目对接 CRUD,待测试: [Elasticsearch](https://www.elastic.co/cn/what-is/elasticsearch-sql), [OceanBase](https://www.oceanbase.com/docs/oceanbase/V2.2.50/ss-sr-select_daur3l), [Presto](https://prestodb.io/docs/current/admin/function-namespace-managers.html), [Spark](http://spark.apache.org/sql/),[Phoenix](http://phoenix.apache.org/language/index.html#select)(延伸支持 HBase), [Presto/Trino](https://prestodb.io/docs/current/sql/select.html)[](https://github.com/Tencent/APIJSON#%E6%88%91%E8%A6%81%E8%B5%9E%E8%B5%8F)(延伸支持 Redis, Hive, Kafka, Elasticsearch, Thrift, Cassandra, MySQL, PostgreSQL, Oracle, MongoDB...) 目前 APIJSON 专注于 MySQL, PostgreSQL 等关系型数据库,暂时不提供原生支持 MongoDB 等非关系型数据库。 非原生支持的数据库(如 Redis 等内存数据库,MongoDB 等非关系型数据库)也可以通过重写 SQLConfig, SQLExecutor 等相关方法来接入。参考以上 25.APIJSON 支持缓存吗? #### 27.APIJSON 支持哪些编程语言?哪些后端(服务端)、前端(终端、客户端)? APIJSON 目前提供实现的编程语言及前后端都已在首页顶部列出 https://github.com/Tencent/APIJSON#--apijson  支持的后端编程语言及版本包括但不限于 Java 1.8+, Go 1.16+, CSharp 2.1+, PHP 8.0+, Node.js ES6+, Python 3.0+ 前端支持浏览器网页、PWA、SPA、微信等各家小程序、Android 客户端、iOS 客户端、Windows 客户端、macOS 客户端 以及几乎所有能运行在浏览器/终端(手机、平板、电脑、服务器、智能家居、嵌入式、机器人等)设备 并且能够发起网络请求和接收回包结果的编程语言,包括但不限于 Python, C, Java, C++, C#, Visual Basic, JavaScript, PHP, Assembly language, Go, Swift, R, MATLAB, Delphi, Object Pascal, Ruby, Objective-C, Perl, Groovy, Rust, Dart, Kotlin, Lua, Julia, Prolog, Lisp, D, Scala, TypeScript, VBScript, PowerShell, Haskell, Clojure #### 28.APIJSON 支持全文检索/全文搜索/全文索引吗? 原生支持 MySQL 等数据库的 https://github.com/Tencent/APIJSON/issues/265 如果是 Elasticsearch,可能支持,试试 elasticsearch-sql https://www.elastic.co/cn/what-is/elasticsearch-sql #### 29.修改了 Access/Request/Function/Document 表配置后如何生效? 重启项目,或者调用 /reload 接口,具体见 [DemoController.reload](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/boot/DemoController.java#L392-L409) 方法注释 #### 30.APIJSON 支持上传、下载文件(Excel、图片、音视频等)吗? 不支持,APIJSON 是专为数据库表记录增删改查的 ORM 库,不要拿着锤子就看什么都觉得是钉子。 https://github.com/Tencent/APIJSON/issues/108 https://github.com/Tencent/APIJSON/issues/298 https://github.com/Tencent/APIJSON/issues/323 虽然可以通过 [远程函数](https://github.com/Tencent/APIJSON/issues/101) 或 重写方法 等来写代码自定义实现扩展,但大部分情况下使用其它方案更简单方便, 网上搜索 "[SpringBoot 上传文件](https://www.google.com/search?q=SpringBoot+%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6)" 等就有一大堆现成的成熟方案,其它同理,举一反三。 APIJSON 对各种库、框架的兼容性很好,几乎没有不兼容的,基本不用担心配合其它项目使用会有问题。 #### 31.在哪查看各种功能对应请求参数的 Demo 示例? 除了通用文档的 60 多个带测试链接的各种例子 https://github.com/Tencent/APIJSON/blob/master/Document.md     配套的接口工具 APIAuto 上两百个左右例子也多看看 http://apijson.cn/api 账号及密码 13000082001/123456  账号及密码 13000088888/123456  #### 32.Maven/Gradle 等远程依赖下载/同步不了 APIJSON, apijson-framework 等相关依赖库怎么办? 先检查仓库源是否有 jitpack.io,没有就加上,[Demo 里都是有的](https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/pom.xml#L79-L86),可以直接复制粘贴,然后 sync。 如果已有还是不行,开 VPN 网络代理试试,可以先打开 youtube.com/google.com 等网站验证 VPN 是否可用。 再不行就注释相关依赖,直接改用依赖本地 jar 包,最近发布的每个 release 的 Assets 都有相关文件: https://github.com/APIJSON/APIJSON-Demo/releases 例如 APIJSONBoot 的 libs 目录就是添加了本地 jar 包,作为备选依赖方式 https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server/APIJSONBoot/libs 相关 issue: https://github.com/APIJSON/APIJSON-Demo/issues/21 https://github.com/APIJSON/APIJSON-Demo/issues/11 https://github.com/Tencent/APIJSON/issues/220 https://github.com/Tencent/APIJSON/issues/171 <br /> #### 33.前端是否需要了解表结构、关联关系、业务逻辑等?推荐的前后端接口对接方式是? 不需要。后端把请求 URL 和 JSON 提供给前端即可,这点和传统方式差不多,推荐用 APIAuto 上传,也可以用 YApi, Postman 等其它接口管理工具。 <img width="1275" alt="image" src="https://user-images.githubusercontent.com/5738175/183906302-5a4f33a4-0c3b-4779-b4c7-a95a4e152f33.png"> <img width="1279" alt="image" src="https://user-images.githubusercontent.com/5738175/183906617-8b139554-6b4b-4931-b072-8e5cf7ac5532.png"> http://apijson.cn/api #### 34.学习和使用 APIJSON 需要达到什么样的技术水平?熟悉哪些相关的知识? 需要达到实习生的技术水平,如果是高校学生需要拿到实习 Offer,如果是社会人员需要能拿到社招 Offer。 首先前后端都要熟悉 HTTP 协议 和 JSON 协议,熟悉 APIAuto/Postman/YApi/Rap 等任意一个 HTTP 测试工具,另外 #### 对于后端 * **1.熟悉 MySQL/PostgreSQL 或其它数据库的安装、建表、数据记录读写** * **2.对应数据库 SQL 语言/方言的使用** * **3.对应后端语言及 IDE 的使用** 例如 Java 用 InteliJ IDEA/Eclipse,Go 用 Goland,C# 用 Visual Studio, PHP 用 PHPStorm, Python 用 PyCharm 等, Node.js 用 WebStorm/VS Code 等 * **4.JDBC 驱动的接入** 如果是 Java 或其他 JVM 语言,则 Maven 依赖必须,其次最好了解 Gradle/Jar/源码 依赖。 C#(NuGet), Go(import), JavaScript(NPM), PHP(Composer), TypeScript(NPM) 等其它语言见各自的库依赖/包管理方式。 * **5.掌握 Web 框架** 例如 Java 的 SpringBoot 或 JFinal, Go 的原生网络库或 Gin/GoFrame 等第三方 Web 框架, Node.js 的 Koa 或 Express 等 * **6.掌握 APIJSON 规范** #### 对于前端 * **1.熟悉前端(客户端)编程语言及 IDE 的使用** 例如 JavaSccript/TypeScript 用 WebStorm/VS Code,Android Java/Kotlin 用 Android Studio,iOS Objective C/Swift 用 XCode 等 * **2.会使用对应前端语言及相关网络请求库对 HTTP API 发起 POST application/json 的请求并解析 JSON 结果** 例如 Axios, Ajax 等 **如果连这种基本要求都达不到,那就先不要用 APIJSON,先学好基础再来!** #### 35.如何使用 SpringBoot 的 application.yml 或 application.properties 来配置数据库账号及密码?为什么 APIJSON 并发下返回数据错误,和数据库实际表记录行的值对不上? **APIJSON 的所有解析类的实例都不能复用,全部由 APIJSONORM 或 apijson-framework 等扩展项目管理!** **不要用 @Conponent/@Configuration/@Service 等注解在 Parser/ObjectParser/SQLConfig/SQLExecutor 等 APIJSON ORM 库的任何类及它们的任何子类!** 如果想用 SpringBoot 的 application.yml 或 application.properties 来配置 https://www.google.com/search?q=%22springboot%22+AND+%22%E8%8E%B7%E5%8F%96%22+AND+%22%E9%85%8D%E7%BD%AE%22&oq=%22springboot%22+AND+%22%E8%8E%B7%E5%8F%96%22+AND+%22%E9%85%8D%E7%BD%AE%22&aqs=chrome..69i57j0i546j0i30i546.21445j0j7&sourceid=chrome&ie=UTF-8 则可以用以下任意一个方式 1.environment.getProperty https://www.google.com/search?q=%22springboot%22+AND+%22environment.getProperty%22 2.PropertiesLoaderUtils.loadAllProperties https://www.google.com/search?q=%22springboot%22+AND+%22PropertiesLoaderUtils.loadAllProperties%22 3.单独新建一个类 ```java @Component @ConfigurationProperties public class Config { public static String dbAccount; @Value("${mysql.account}") public void setDbAccount(String account) { dbAccount = account; } } ``` 然后再引用对应的值 ```java public class DemoSQLConfig extends APIJSONSQLConfig { public String getDBAccount() { return Config.dbAccount; } } ``` https://gitee.com/Tencent/APIJSON/issues/I5LWSH #### 其它问题见 Closed Issues https://github.com/Tencent/APIJSON/issues?q=is%3Aissue+is%3Aclosed <br />
评论 (
1
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
Java
1
https://gitee.com/Tencent/APIJSON.git
git@gitee.com:Tencent/APIJSON.git
Tencent
APIJSON
APIJSON
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册