Giter VIP home page Giter VIP logo

tencent / apijson Goto Github PK

View Code? Open in Web Editor NEW
16.6K 16.6K 2.1K 70.96 MB

🏆 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构。 🏆 A JSON Transmission Protocol and an ORM Library 🚀 provides APIs and Docs without writing any code.

Home Page: http://apijson.cn

License: Other

Java 100.00%
baas clickhouse crud databricks elasticsearch hadoop hive influxdb low-code lowcode milvus nocode oracle postgresql postgresql-database serverless snowflake sqlserver tdengine tidb

apijson's People

Contributors

awenjackson avatar chenyanlann avatar cloudandmonkey avatar csx-bill avatar fanpocha avatar fineday009 avatar gdjs2 avatar github-ganyu avatar github291406933 avatar gukaiqi avatar haolingzhang1 avatar ifooling avatar jarrodquan avatar jerrylususu avatar jia199807 avatar justinfengchen avatar kenlig avatar kxlv2000 avatar neogitcrt1 avatar qiujunlin avatar rkyzzy avatar ruoranw avatar singledogl avatar sy-records avatar tommylemon avatar vincentcheng avatar wahowaho avatar yeyuezhishou avatar zerounary avatar zhoulingfengofcd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

apijson's Issues

怎么打包到Linux上运行

在本地运行起来了但是
想编译成jar放到服务器上运行
试了mvn compile 出错
百度后在里面增加了,我的目的是增加Lib带项目里面,不知道正确不,但是mvn compile成功了。

<dependency>
	<groupId>apijson-server</groupId>
	<artifactId>apijson-server</artifactId>
	<version>2.5.5</version>
	<scope>system</scope>
	<systemPath>${project.basedir}/libs/apijson-server2.5.5.jar
	</systemPath>
</dependency>

不过mvn package还是失败 - - 没接触过JAVA,忘能指点一二

为何star那么多而issue那么少

作为一个开发者,比较关心反馈问题。良好的反馈和解决问题的速度是决定用不用一个东西的关键。
但我发现这里反馈的问题很少,不知道实际使用情况如何。有没有类似的社区或者什么地方可以看到其他人使用情况

讨论APIJSON的使用需求问题

一开始看到这个项目的时候我是糊涂的。因为我没理解这个工具的用途是什么。
仔细看了一下原理,原来是相当于一个转换器,通过restful api 操作数据库,并返回一些内容。
但即使我知道了这点后,我还是表示相当惊讶——读数据库不是很简单的吗,为什么要写一个转换器?
再深入了解下,我才发现这是我的盲区。因为我是前端后端都会,大部分情况,我不需要转换器,我也很多情况下拥有读取数据库的能力。对我来讲读数据库就是一件很简单的事情。为了这么简单的事情专门写个转换器太麻烦了。但,我不需要,不代表别人不需要。我猜APIJSON的主要用户是app开发者,和部分纯前端开发者(极少接触过后端)。他们可能比较需要一种“用客户端请求就能操作数据库”的能力。
作者这种发现需求的能力值得赞扬。
然后,我提一下我个人的一些建议,仅供参考。
1,因为我曾经做过复杂后端开发,所以我想说下,很多情况下,从数据库到输出json这个过程的中间,是需要逻辑处理的。直接输出数据表字段仅仅是其中一种比例不高的情况。举一些例子。对于电商情形,ta要多次计算订单数据,更新多个表,中间还可能涉及到事务,最后才会输出sjon 。如果中间过程出错了右该如何回滚,如何容错。
所以,我建议你可以多思考下有没有可能在这里做个扩展,比如说暴露一些API或者函数钩子之类的,允许别人添加自定义的逻辑处理。这块水很深,需要细想。
2,因为我自己做过web前端开发,所以,我觉得,一个前端人员如果非要提前使用json接口来调试,不想等待后端修改,我可能更多用mock数据。所以我个人猜想前端开发人员对APIJSON的使用需求不会很强烈。也因此我为什么在上面猜测APIJSON的使用群里应该更多是app开发者。因为app开发者才更需要这种“用客户端请求就能操作数据库”的能力。当然可能是我想错了。毕竟我可能不清楚其他用户群体的需求。
3,你的技术选型不好。我看到你的做法是每种语言都搞一个server端。这是个无底坑。因为你每次做个更新都要各种语言实现一遍。如果没人指出这个问题,我觉得你以后会持续把自己的精力浪费在不必要的事情上。我个人建议,你可以深入学习一种后端语言,最好是node或者go,因为这两者通过一些工具都可以把代码打包,打包后则适合在各种环境下运行。这方面我只是浅层建议,你去调研一下吧。
4,我留意到这个APIJSON项目,是因为我的项目showdoc https://github.com/star7th/showdoc 。我会先保持观察,调研下需求有没有必要集成进来,或者用我自己的方式重新实现一遍深度整合进showdoc

希望能够对demo提供一个文档

这两天详细看了APIJSON,demo也跑了,效果非常好,感谢开源奉献。自己想在开发中用的时候,却有一种无从下手的感觉(可能太菜了吧^^),包括整个执行的逻辑,自己应该重写哪些方法?希望提供一个文档,来说明一个这个demo的实现,如此愿意尝试朋友,一下子就明白了,都去看源码压力太大。
或者简单的提一下哪些类是干嘛的,我想在项目利用APIJSON写CURD,该去实现那几部分?

没看明白干什么用的

有没有懂的白话一下这个是干嘛的。
前端要怎么用,服务器要怎么做,后端怎么配合。

v7包冲突

在Android的app中引用v7包无法运行,提示包冲突了,不知道是哪个包冲突的。。。。
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

How to make another APIJSON? / 如何实现其它语言的APIJSON?

目前已有 C#, Go, Java, Node, PHP, Python 对应的 APIJSON ORM 库实现
https://github.com/Tencent/APIJSON#%E7%94%9F%E6%80%81%E9%A1%B9%E7%9B%AE

一开始不要贪大求全,实现基础的功能就好,功能后面再完善、性能后面再优化。

可以参考Java版的实现,建议从这个版本做起
https://github.com/TommyLemon/APIJSON/tree/636fe2263c01acce4ad32751cbb8a579830d9f29

这个是最简单的实现,只有7个类,将JSON转换为SQL,但也能够实现最核心的 引用赋值、单表查询、数组分页查询 了。
先完成这个,后面再优化。如果直接实现复杂功能,很可能导致一大堆问题然后坚持不下去。

能否使用role之类的设置限制返回结果?

大致看了眼源码,貌似没法限制返回结果么?比如查询user的话,通过外键查询其creditcard信息,但不应该所有人都可以访问到creditcard的内容才是。因为只是匆匆一瞥,也不是很熟悉java,如果没看到还请包涵。

看到作者在开源**的帖子,奈何无法回复,特在此开个issue

作者想法是非常前卫的,这篇文章是在查 graphql 的资料时看看到的,眼前一亮。
基于几点问题目前还不敢投入产品使用

  1. 是SQL的生成,对于大型项目来说,SQL优化是一个重点,用生成的不好把控(所以很多喜欢MyBatis而不喜欢Hibernate)。
  2. 这个虽然不是基于传统的API,但是却要基于更底层的数据库文档,数据结构前端也需要参与,当然,这是沟通问题。
  3. 对于分布式数据库来说, 有时数据是从不同的服务器取的,这个如果采用这个思路,需要怎么解决跨数据库问题?

另,看到作者回复的:

前端的验证是为了减少后端验证,提到响应速度。
比如密码字符、长度、强度如果每次都要后端验证,响应速度慢导致前端体验差。
所以前端验证通过后再交给后端,后端只要做最后一次验证就行了,前面的验证都能无延时响应。
TommyLemon

有一些不同的意见
对后端来说,原则上是不不能相信任何一个来调用接口的,因为不知道是爬虫调用还是客户端调用,都是可以模拟的。所以原则上后端都要验证一次。

APIJSON的安全问题

看了大佬的说明和介绍,小弟非常佩服,但仔细想想可能存在安全隐患,只要别人知道你的接口名,就可以获取他想要的内容了,不知道是否有安全机制的加入?

将整个后台打成war包

你好,请问一下怎么将这整个后台打成war包放到服务器上,我试了很多方法,可以运行,但是打war包的时候找不到引用的apijson-library库

文档中没看到角色权限怎么配置,似乎还没有更新上?

支持你这种方案,让前端去动态定义接口数据。
我也尝试写过类似的东东,遇到两个问题:

  1. 权限部分比较麻烦,我使用定义分组权限的方法,配置不怎么方便。
  2. 对多查询的 sql 优化问题,我使用重写字段名和后期整理的方式间接解决,大数据量有问题。(没看到你是怎么解决的)

What

这不就是graphql吗

有没有兴趣

https://github.com/Shyam-Chen/Backend-Starter-Kit
做一个类似的基于APIJSON的Backend-Starter-Kit

## Directory Structure

.
├── flow-typed
├── src
│ ├── document
│ │ └── index.js ...
│ ├── graphql
│ │ └── index.js ...
│ ├── apijson
│ │ └── index.js ...
│ ├── relational
│ │ └── index.js ...
│ ├── rest
│ │ └── index.js ...
│ ├── api.js
│ ├── config.js
│ └── pm2.js
├── test
│ ├── graphql
│ │ └── xxx.spec.js ...
│ └── rest
│ └── xxx.spec.js ...
│ ├── apijson
│ └── xxx.spec.js ...
├── .babelrc
├── .editorconfig
├── .eslintrc
├── .gitattributes
├── .gitignore
├── Dockerfile.dev
├── Dockerfile.prod
├── LICENSE
├── Procfile
├── README.md
├── circle.yml
├── docker-compose.yml
├── package.json
└── yarn.lock


不知道会出Node.js版本吗?

不知道会出Node.js版本吗?如果能出的话就太好了,这样前端开发人员就可以直接使用了。
希望作者能考虑一下。
谢谢!

基于此提出的一些问题

  1. 采用本框架是否会影响到项目性能
  2. 由于本框架采用的是直接拼接sql,会不会导致有sql注入的危险?

FAQ & Read me before asking / 常见问题与提问前必看

本 Issue 仅限作者维护,其他人不要回复。

如果你已经知道问题所在、怎么解决,请直接 提交 Pull Request 为社区做贡献,非常感谢。
开发者也是人,也需要工作、休息、恋爱、陪伴家人、走亲会友等,也有心情不好和身体病痛,
往往没有额外的时间精力顾及一些小问题,请理解和支持,开源要大家参与贡献才会更美好~
少数个人的热情终有被耗尽的一天,只有大家共同建设和繁荣社区,才能让开源可持续发展!
#406


"APIJSON 支持/能 XX 吗?",例如 "支持全文检索吗?","支持连接池吗?", "能分库分表吗?",
问这类问题之前先想想这是不是 ORM 库或者说 SQL 的功能:
如果是那基本就支持,问之前自己先试试吧,没试出来再问;
如果不是,问问自己 "APIJSON 妨碍我用其它库实现这个需求吗?",
APIJSON 良好的兼容性让这个问题几乎不会发生,基本随便找个热门的 分库分表/连接池 等库都能简单对接起来。
#153 #107 #98 #323 #104 #108 #89 #64 #437 #436 #313 #270 #267 #265


1.尝试在 下方常见问题 (快捷键 Ctrl/Command + F) 和 历史问题 (Filters 输入框) 搜索答案。
2.尝试阅读 通用文档 或看 视频教程 找到答案。
3.尝试阅读 Demo 示例代码 以找到答案。
4.尝试自己 检查或试验 以找到答案。
5.尝试阅读 源码和注释 以找到答案。

如果以上都尝试过了请提一个新的issue。
强烈推荐阅读 ​提问的智慧-**版如何向开源社区提问题如何有效地报告 Bug如何向开源项目提交无法解答的问题
提问的智慧,更好的问题更容易获得帮助。


提 bug 请发请求和响应的【完整截屏】,没图或者 【不是全屏】的自行解决!
开发者有限的时间和精力主要放在【维护项目源码和文档】上!
【描述不详细】 或 【文档/常见问题 已有答案】 的问题直接拒绝!!
【态度 不文明/不友善】的可能会被拉黑,问题也不予解答!!!

请求参数 JSON 中表名、字段名、关键词及对应的值都是大小写敏感、逗号敏感、分号敏感、空格敏感、换行敏感,
大部分情况都不允许空格和换行,表名以大写字母开头,不要想当然,请严格按照 设计规范 来调用 API #181

常见问题

0.为什么 Issue/QQ群/微信群 没人愿意回答你的问题?

文档/注释/常见问题已解答的重复提问、缺这少那没有足够的包括截屏在内的上下文信息、提问不礼貌态度不客气等。

开发者时间精力有限,原则上优先解决 登记用户 和 贡献者 的问题,
不解决 文档/视频/常见问题 已明确说明、描述简陋 或 态度无礼 的问题!
如果你已经多次得到帮助,却仍然只索取不贡献,那就别指望大家再帮你!
私聊作者请教技术问题 或者 频繁在互助群 @ 作者 可能会被拉黑/禁言/踢群,请尊重和理解,谢谢!

如果你 提 PR 登记了自己使用 APIJSON 的公司,可以加 企业用户支持专群,作者亲自且优先答疑,
作者只有解答完了这个专群里的全部问题,才看情况解答 Issue 里的问题(对 Issue 不保证解答、更不保证及时);
其它群为互助群,由于大多数问题 在文档/Issue 已有答案却反复提 或者 缺少必要信息要来来回回沟通问清细节 已浪费太多时间,
甚至有白嫖还把自己当大爷的自私自利伸手党输出情绪,作者不再解答互助群问题,由群友互助解答,建议未登记企业的用户 填问卷提 Issue

如果你为 APIJSON 做出了以下任何一个贡献:
提交了 PR 且被合并提交了优质 Issue发表了优质文章开发了可用的生态项目
可以在群里发出贡献链接并附带说明,管理员将设置关注你一段时间,优先答疑解惑。
互助群一般解答顺序:贡献者 > 帮助他人的群友 > 带企业名昵称 > 带岗位名昵称 > 其他群友。

QQ技术群2 开始 3 个数字(1,2,3位):734

1.如何定制业务逻辑?

在后端编写 远程函数,可以拿到 session、version、当前 JSON 对象、参数名称 等,然后对查到的数据自定义处理
#101

远程函数原理和使用详细讲解
https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#远程函数和-function-表

2.如何控制权限?

在 Access 表配置校验规则,默认不允许访问,需要对 每张表、每种角色、每种操作 做相应的配置,粒度细分到行级

#12

权限控制原理和使用详细讲解
https://github.com/jerrylususu/apijson_todo_demo/blob/master/FULLTEXT.md#访问控制角色和-access-表

3.如何校验参数?

在 Request 表配置校验规则 structure,提供 MUST、TYPE、VERIFY 等通用方法,可通过 远程函数 来完全自定义

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)
#85

5.如何 OR 或连接不同 key 对应的条件?

用对象关键词 @combine,例如 5.0.0+ 可以用 "@combine":"name~ | tag~" ,低于 5.0.0 只能用 "@combine":"name~,tag~"

#107

6.登录后 增删改 报错未登录?

如果是自己的网页、小程序、客户端这样报错,一般是因为没有存取 Cookie,需要在登录成功后保存 Cookie 并在调其它接口时带上
https://gitee.com/Tencent/APIJSON/issues/I1JTYH

如果使用网页工具测试报错,则很可能是 Chrome 80+ 强制前端网页 JavaScript 跨域 same-site Cookie 的策略导致,可以改用 Postman 或修改 Chrome 设置。
#166

如果是用 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 一样把 APIAuto 的源码放到 src/main/resources/static 目录,
再用浏览器打开本地主页
http://localhost:8080
然后把网页的 URL 输入框 改为
http://localhost:8080/login
托管服务器地址 URL 改为
http://localhost:8080
(注:假设本地服务端口为默认的 8080)

7.和 GraphQL 的区别

GraphQL 是用来聚合和过滤数据的网关,不提供增删改查功能;
APIJSON 提供万能通用的增删改查 API,零代码实时实现各种简单的和复杂的需求(一对一、一对多、多对一、多对多任意关联,各种 JOIN、各种子查询及 JOIN 和子查询相互嵌套等)
#205
#108 (comment)

8.和 Swagger, YApi 等接口工具的区别

APIJSON 不是文档工具、也不是测试工具,配套的 APIAuto 才是 HTTP 接口 的文档/测试工具
#27

9.和 Hiberante, JPA, JOOQ, Prisma, Sequelize, Linq 等其它 ORM 库的区别

只有 APIJSON 能做到不写任何代码,也不生成任何代码,直接零代码做到各种增删改查、各种结构嵌套、各种外键关联、各种条件与或非组合、各种 JOIN、各种子查询 等几乎所有 SQL 的功能,其它 ORM 库如果有做到零代码实现 APIJSON 1/10 功能 的,请直接 New issue 讨论。
#29

10.APIJSON 相比其它框架/库的优势?

APIJSONBoot 对比 SSM/SSH 等开发效率可提升 20 倍以上
#132

QQ技术群1 最后 3 个数字(7,8,9位):115

11.如何使用自增主键 id?没有主键 id 怎么增删改?

删除和修改必须要有主键。
在没有主键的表新增记录 或者 在有主键的表使用自增主键,
可在 DemoSQLConfig static 代码块中重写 SIMPLE_CALLBACK 的 newId 方法,return null 即可
#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
#148

14.自己已经有一套鉴权系统了,不想用 APIJSON 的这套怎么办?

DemoParser 重写 Parser 中的 isNeedVerifyLogin, isNeedVerifyRole, isNeedVerifyContent 来指定是否开关某个方面的校验
https://github.com/Tencent/APIJSON/blob/22ed7cc9e801f35158e85cf6adfa5c1243eb09c9/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java
#12 (comment)

也可以使用或参考其他开发者贡献的鉴权方式
#286

15.如何自动插入 create_time, update_time, creator_id, is_deleted 之类的业务上全局通用字段?

可以用 远程函数 + 引用赋值 来针对某个特定业务(表)来实现。如果是通用字段,还可以在重写 DemoObjectParser 重写 newSQLConfig,把从 Controller 经过 DemoParser 传过来的 gmt_create, create_time, creator_id, is_deleted 等 put 进去。具体见
#196

16.如何集成到自己现有的项目?

在你用的框架类似 Demo 新增几个接口调用 DemoParser 即可,
APIJSONController 只是简单封装,可以不继承,
例如 JFinal 版 Demo 中的 DemoController 就没有继承它,而是继承 JFinal 的 Controller。
#201 (comment)

建议直接把 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

#484
#259
#243

另外可以通过

"@order":"id+",
"id>": 列表最后一项的 id

"@order":"id-",
"id<": 列表最后一项的 id

这种方式来优化分页性能,并且绕过页码限制(实际可累计查询超过 10000 条 )。

19.如何实现假删除/软删除/逻辑删除?

可以用 is_deleted int 字段标记是否已删除,调 /put 接口改掉 is_deleted 的值,然后查询时可以传 is_deleted 条件或参考以上问题 15 在后端统一自动插入 is_deleted 条件
#301

20.为什么引用赋值关联的副表查不到数据?

不在同一层级必须用 完整(绝对)路径,在熟悉前最好只用 完整(绝对)路径,不要偷懒省几个字符错用 缺省(相对)路径
#335

QQ技术群2 中间 3 个数字(4,5,6位):652

21.通用文档中的存储过程示例对应的 SQL 是?

根据 userId 查评论列表

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);

获取所有产品

DROP PROCEDURE IF EXISTS getAllProducts;

DELIMITER //
CREATE PROCEDURE getAllProducts()
BEGIN
SELECT * FROM sys.Comment LIMIT 1;
END //
DELIMITER ;

SHOW PROCEDURE STATUS;

CALL sys.getAllProducts();

判断是否包含

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 的水平。
#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的部分基于什么实现的?
#146

APIJSON 怎么很好的跟分布式缓存结合呢?
#90

QQ技术群1 中间 3 个数字(4,5,6位):020

26.APIJSON 支持哪些数据库?是否支持 MongoDB 等非关系型数据库?

APIJSON 原生支持的数据库及版本都已在首页顶部列出
https://github.com/Tencent/APIJSON#--apijson
image

包括但不限于
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, OceanBase, Presto, Spark,Phoenix(延伸支持 HBase), Presto/Trino(延伸支持 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
image

支持的后端编程语言及版本包括但不限于 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 等数据库的
#265

如果是 Elasticsearch,可能支持,试试 elasticsearch-sql
https://www.elastic.co/cn/what-is/elasticsearch-sql

29.修改了 Access/Request/Function/Document 表配置后如何生效?

重启项目,或者调用 /reload 接口,具体见 DemoController.reload 方法注释

30.APIJSON 支持上传、下载文件(Excel、图片、音视频等)吗?

不支持,APIJSON 是专为数据库表记录增删改查的 ORM 库,不要拿着锤子就看什么都觉得是钉子。
#108
#298
#323

虽然可以通过 远程函数 或 重写方法 等来写代码自定义实现扩展,但大部分情况下使用其它方案更简单方便,
网上搜索 "SpringBoot 上传文件" 等就有一大堆现成的成熟方案,其它同理,举一反三。
APIJSON 对各种库、框架的兼容性很好,几乎没有不兼容的,基本不用担心配合其它项目使用会有问题。

31.在哪查看各种功能对应请求参数的 Demo 示例?

除了通用文档的 60 多个带测试链接的各种例子
https://github.com/Tencent/APIJSON/blob/master/Document.md
image
image
image
image

配套的接口工具 APIAuto 上两百个左右例子也多看看
http://apijson.cn/api

账号及密码 13000082001/123456
image

账号及密码 13000088888/123456
image

32.Maven/Gradle 等远程依赖下载/同步不了 APIJSON, apijson-framework 等相关依赖库怎么办?

先检查仓库源是否有 jitpack.io,没有就加上,Demo 里都是有的,可以直接复制粘贴,然后 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
#220
#171

33.前端是否需要了解表结构、关联关系、业务逻辑等?推荐的前后端接口对接方式是?

不需要。后端把请求 URL 和 JSON 提供给前端即可,这点和传统方式差不多,推荐用 APIAuto 上传,也可以用 YApi, Postman 等其它接口管理工具。
image
image

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.单独新建一个类

@Component
@ConfigurationProperties
public class Config { 
    public static String dbAccount;

    @Value("${mysql.account}")
    public void setDbAccount(String account) {
        dbAccount = account;
    }
}

然后再引用对应的值

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

Oracle 读取CLOB类型的数据无法返回值

环境信息

  • 系统: Windows 10
  • JDK: 1.8.0_17
  • 数据库: Oracle 11g
  • APIJSON: 2.9.1

问题描述

有一张后台现成的用户表,部署上APIJSON后get了下。报错了。

create table USERS
(
  id                     NUMBER(10) not null,
  ....
  issys                  CHAR(1) default 'N' not null,
  mac                    CLOB,
  ...
)

错误信息

DemoSQLExecutor.DEBUG: 成功加载 数据库 驱动!
AbstractParser.INFO: 
getObject:  parentPath = null;
 name = null; request = {"Users":{"id":893}}
AbstractParser.INFO: getPath  path = null; name = null <<<<<<<<<<<<<
AbstractParser.INFO: getPath  return  >>>>>>>>>>>>>>>>
ObjectParser.DEBUG: ObjectParser  table = null; isTable = false
ObjectParser.DEBUG: ObjectParser  isEmpty = false; tri = false; drop = false
AbstractParser.INFO: 
getObject:  parentPath = ;
 name = Users; request = {"id":893}
AbstractParser.INFO: getPath  path = ; name = Users <<<<<<<<<<<<<
AbstractParser.INFO: getPath  return Users >>>>>>>>>>>>>>>>
ObjectParser.DEBUG: ObjectParser  table = Users; isTable = true
ObjectParser.DEBUG: ObjectParser  isEmpty = false; tri = false; drop = false
AbstractParser.INFO: executeSQL  config = {"alias":"Users","cacheStatic":false,"combine":{"&":["id"],"|":[],"!":[]},"content":{},"count":1,"dBAccount":"bosnds3","dBPassword":"abc123","dBUri":"jdbc:oracle:thin:@tbos-db-test.idc.vgrass.com:1521:bostest","id":"893","joinString":"","keyPrefix":false,"main":true,"method":"GET","page":0,"position":0,"prepared":true,"preparedValueList":[],"query":0,"schema":"BOSNDS3","table":"Users","test":false,"type":0,"where":{"id":"893"}}
AbstractVerifier.DEBUG: verifyRole  table = Users; method = GET; role = UNKNOWN
SQLConfig.DEBUG: getWhereItem  key = id
SQLConfig.INFO: getRealKey  saveLogic = true; originKey = id
SQLConfig.INFO: getRealKey  return key = id
SQLExecutor.DEBUG: 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 select  startTime = 1541579408062
 sql = 
 SELECT * FROM BOSNDS3.Users WHERE  (  (id='893')  )  AND rownum <= 1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

SQLExecutor.INFO: >>> select  result = getCache('SELECT * FROM BOSNDS3.Users WHERE  (  (id='893')  )  AND rownum <= 1', 0) = null
DemoSQLExecutor.INFO: select  connection  = null
SQLConfig.DEBUG: getWhereItem  key = id
SQLConfig.INFO: getRealKey  saveLogic = true; originKey = id
SQLConfig.INFO: getRealKey  return key = id
SQLExecutor.DEBUG: 

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 select while (rs.next()){  index = 0


SQLExecutor.DEBUG: 
 select  while (rs.next()) { resultMap.put( 0, result); 
 >>>>>>>>>>>>>>>>>>>>>>>>>>> 


SQLExecutor.INFO: >>> select  putCache('SELECT * FROM BOSNDS3.Users WHERE  (  (id='893')  )  AND rownum <= 1', resultMap);  resultMap.size() = 1
SQLExecutor.DEBUG: 

 select  endTime = 1541579408753; duration = 691
 return resultMap.get(0);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


AbstractParser.DEBUG: putQueryResult  queryResultMap.containsKey(valuePath) >> queryResultMap.put(path, result);
AbstractParser.INFO: 
 putQueryResult  valuePath = Users; result = {"ID":893,"AD_CLIENT_ID":37,"AD_ORG_ID":27,"ISACTIVE":"Y","MODIFIERID":893,"CREATIONDATE":"2009-01-13 11:48:17.0","MODIFIEDDATE":"2018-10-31 09:33:31.0","OWNERID":1,"PASSWORDHASH":"bos20","ISENABLED":1,"ISADMIN":1,"USERTYPE":1,"TRUENAME":"超级用户","NAME":"root","DESCRIPTION":"系统管理员","PASSWORD":"753951","EMAIL":"[email protected]","LANGUAGE":"zh_CN","IS_OTP":"N","OTP_LENGTH":8,"OTP_SECONDS":120,"IS_OTP_ONLY":"N","ISSMS":"N","IS_OUT":"N","ISSALER":"Y","C_STORE_ID":71,"DISCOUNTLIMIT":0.3,"ISOPR":"N","C_CUSTOMER_ID":1,"C_CUSTOMERUP_ID":0,"SGRADE":30,"PASSWORDRESET":"N","ISRET":"Y","WEBPOS_PER":"1000000001","ISSYS":"N","MAC":"b4519b82bc29afeb2d2205dc3aa7d2ec8279cce8afbcb04d7806342b89b6790b33f13f512203c920f333e3418032e8fa116031436923a1fe6b3010e3c458116313bb0330015e94c8d40ed4f4c866997c1e384a751f9bd75df9ef63cb90662f6c14288441b9da49aaae8e9b0784a81c7b37d774a3eb22602ff89a47b5ac546e338e1b83a30c10a6a346a9efad752f54059797a8562d7626e472037e0d1dc81d665af2b28664ded39693a0b3f6a958fa64db0c6a6e5d795c607fa6d84840dc5711a450360f45ac403f9638715829d6d34dcabe632ac5f47f610d7d56897e7d102b844fa0fcf2b5f59b4a1b6f5ed0661463ecfa0f19af16e1a1efc3da3c00d4414ad434f5aaff6a280a5ab777d7a0191e3b0e2a75eb81682eb5e8bacd0784e387b0ba6f212bf46d9739dd7030054823f668595ef8c19767f933e11f91dd17ba2d4e3f09c3a454bda1c0cf60327c15b8bbfac4fa3ce970370ec8e76fdbcbab187fcf89e59806390068b0098f52ec84c456cbc6cd7df52c29462fb1e6b304255d72d6eb6687da3e57981a5d9857522b8896fa378faafe0728a1ff7c1bd34d82b1f2bfb22b9d542acc589cd1bfc161f9008825b71dd2f94c2614a0df98e22a869a717cd62fbc17d7e61177f36e7e6509de541b7b38ddcf4f9bf1bd158625168c9efba7776238129fe4a5810c5f89ad5d0af815065fe4c694204d9db2a6451fc2e7e54dfee8c805f233223cd907be10d3933f91ea3d4392158a6cba00ece7a2ea88b7840882de70534d469193c6137dcdaae673088e6e97c85ae21c364bec5feed27f741f5d29cd8cc78ffdce6cd74b93a1dbb235faf8f3e284f172b823e5626c9e3d0e8d507f75bd21c356ec4609b118a31382638336a7374532a8a21b379856ef872d5ce6766f00ff268364eb5be93e6f82a94b846c4e36c50e13b97fcb56e26964b96e72581dde12cba13590cdffd2dfc343fb28cdb709ad1ea53f2dbe4ea6abcd0bca0d94c52dae465960ec5dd5faf59442","IS_SYS_USER":"Y","QNVL_VIP":"N","WEBPOS20_PER":"111111111111111"}
 <<<<<<<<<<<<<<<<<<<<<<<
ObjectParser.INFO: onChildParse  ObjectParser.onParse  key = Users; child = {"ID":893,"AD_CLIENT_ID":37,"AD_ORG_ID":27,"ISACTIVE":"Y","MODIFIERID":893,"CREATIONDATE":"2009-01-13 11:48:17.0","MODIFIEDDATE":"2018-10-31 09:33:31.0","OWNERID":1,"PASSWORDHASH":"bos20","ISENABLED":1,"ISADMIN":1,"USERTYPE":1,"TRUENAME":"超级用户","NAME":"root","DESCRIPTION":"系统管理员","PASSWORD":"753951","EMAIL":"[email protected]","LANGUAGE":"zh_CN","IS_OTP":"N","OTP_LENGTH":8,"OTP_SECONDS":120,"IS_OTP_ONLY":"N","ISSMS":"N","IS_OUT":"N","ISSALER":"Y","C_STORE_ID":71,"DISCOUNTLIMIT":0.3,"ISOPR":"N","C_CUSTOMER_ID":1,"C_CUSTOMERUP_ID":0,"SGRADE":30,"PASSWORDRESET":"N","ISRET":"Y","WEBPOS_PER":"1000000001","ISSYS":"N","MAC":"b4519b82bc29afeb2d2205dc3aa7d2ec8279cce8afbcb04d7806342b89b6790b33f13f512203c920f333e3418032e8fa116031436923a1fe6b3010e3c458116313bb0330015e94c8d40ed4f4c866997c1e384a751f9bd75df9ef63cb90662f6c14288441b9da49aaae8e9b0784a81c7b37d774a3eb22602ff89a47b5ac546e338e1b83a30c10a6a346a9efad752f54059797a8562d7626e472037e0d1dc81d665af2b28664ded39693a0b3f6a958fa64db0c6a6e5d795c607fa6d84840dc5711a450360f45ac403f9638715829d6d34dcabe632ac5f47f610d7d56897e7d102b844fa0fcf2b5f59b4a1b6f5ed0661463ecfa0f19af16e1a1efc3da3c00d4414ad434f5aaff6a280a5ab777d7a0191e3b0e2a75eb81682eb5e8bacd0784e387b0ba6f212bf46d9739dd7030054823f668595ef8c19767f933e11f91dd17ba2d4e3f09c3a454bda1c0cf60327c15b8bbfac4fa3ce970370ec8e76fdbcbab187fcf89e59806390068b0098f52ec84c456cbc6cd7df52c29462fb1e6b304255d72d6eb6687da3e57981a5d9857522b8896fa378faafe0728a1ff7c1bd34d82b1f2bfb22b9d542acc589cd1bfc161f9008825b71dd2f94c2614a0df98e22a869a717cd62fbc17d7e61177f36e7e6509de541b7b38ddcf4f9bf1bd158625168c9efba7776238129fe4a5810c5f89ad5d0af815065fe4c694204d9db2a6451fc2e7e54dfee8c805f233223cd907be10d3933f91ea3d4392158a6cba00ece7a2ea88b7840882de70534d469193c6137dcdaae673088e6e97c85ae21c364bec5feed27f741f5d29cd8cc78ffdce6cd74b93a1dbb235faf8f3e284f172b823e5626c9e3d0e8d507f75bd21c356ec4609b118a31382638336a7374532a8a21b379856ef872d5ce6766f00ff268364eb5be93e6f82a94b846c4e36c50e13b97fcb56e26964b96e72581dde12cba13590cdffd2dfc343fb28cdb709ad1ea53f2dbe4ea6abcd0bca0d94c52dae465960ec5dd5faf59442","IS_SYS_USER":"Y","QNVL_VIP":"N","WEBPOS20_PER":"111111111111111"}
AbstractParser.DEBUG: 



<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 GET/parseResponse  request = 
{"Users":{"id":893}}


JSON.ERROR: toJSONString  catch 
write clob error
AbstractParser.DEBUG: parse  return response = 
null
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 



AbstractParser.DEBUG: parseResponse  endTime = 1541579408815;  duration = 890>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



JSON.ERROR: toJSONString  catch 
write clob error

如何解决慢查询问题?

实际开发中可能会遇到慢查询,会需要 RD 优化 sql,如果使用 APIJSON 遇到类似 case,怎么定制化的优化 sql 呢?

返回内容的不是json头

环境信息

  • 系统:
  • JDK:
  • 数据库:
  • APIJSON:

问题描述

返回内容的不是json头

错误信息

返回内容的不是json头

关于数据安全性方面

大概看了一下文档.因为没有java环境所以没有实验不过很好奇的问一下如何解决服务端数据的安全性方面呢?数据请求都放在前台后台似乎没有请求验证这方面的逻辑.如何保证我抓包后伪造数据不会删除/修改数据库的一些重要数据呢?
如果有相关方面的实现的话请不要介意.因为就是大概看了一下文档然后提出一些小小的疑惑.并没有具体实验操作过

请问怎么设置tag

{[]: {…}, code: 406, msg: "请设置tag!一般是Table名"}[]: {count: 3, User: {…}}code: 406msg: "请设置tag!一般是Table名"proto: Object

希望实现两张表 一对多 关联查询

目前APIJSON已经实现了实现如下的两张表 一对多 关联查询:

{
    "Moment": {},
    "[]": {
        "Comment": {
            "momentId@": "Moment/id"
        }
    }
}

但是如果我想查询Moment和Moment的praiseUserIdList对应的User,就不行了:

{
    "Moment": {},
    "[]": {
        "User": {
            "id@": "[]/Moment/praiseUserIdList"
        }
    }
}

Java demo 网站上的查询返回结果不合期望

环境信息

  • 系统: 你的demo网站
  • JDK: 你的demo网站
  • 数据库: 你的demo网站
  • APIJSON: 你的demo网站

问题描述

Java demo 网站上的查询返回结果不合期望,如

请求:

{
  "user":{
    "id":9999999999
  }
}

返回:

{"user":{"id":9999999999},"code":200,"msg":"success"}

期望这里应该返回 "user":null 或者如果这里没有user这个表,那么应该返回错误值和错误信息

请求:

{
  "User":{
    "id":9999999999
  }
}

返回:

{"code":200,"msg":"success"}

期望返回 "User":null

请求:

{
  "user":{
  },
  "[]":{
    "count":3,             
    "User":{
      "@column":"id,name" 
    }
  }
}

返回:

{"code":200,"msg":"success"}

期望如果不支持小写开头的表名,那么应该返回错误值而不是success

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.