Tencent/APIJSON

[兼容问题咨询]想请教下APIJSON从5.3.0版本升级到6.2.0版本遇到远程函数调用优先级不一致的问题

KumaNeko33 opened this issue · 1 comments

Description

请求示例:
{
"[]":{
"TEST_TABLE":{
"@column":"id,name",
"@Datasource":"xxxDataSource"
},
"count":"1",
"page":"0",
"query":"2"
},
"list()":"moveObj([],$..TEST_TABLE)",
"method":"GET",
"pageInfo@":"/[]/info"
}
之前用的5.3.0版本,list()的远程调用函数moveObj,会在解析处理[]后执行,现在升级到6.2.0版本,变成了先执行list()的远程调用函数moveObj,再解析处理[]。导致传递给远程调用函数moveObj的参数TEST_TABLE的值不是执行SQL后的数据,而是执行前的JSON对象。
目前我这边给list+()降低优先级解决了问题,就是已经上线的这种用法的远程调用函数都需要处理。

比对了5.3.0版本和6.2.0版本的源码,发现是针对远程调用函数的优先级定义做了变更,5.3.0版本我用的非Table内的list():moveObj,通过functionMap去批量执行,6.2.0版本变成了满足isPlus == false && isTable == false条件 通过parseFunction立即执行了,想请问下这里这么改的原因?是要修复什么问题吗?

为了修复这个 bug 导致 #426

可以把 API 按 APIJSON 的版本来区分,新的 HTTP API 用
/apijson/6/get
这样的版本标识,旧的保持不变,对应两套服务,一个是现有使用 APIJSON 5.3 的,另一个是使用 APIJSON 6.0+ 的。