1. 多条件查询{entity}对象类数据
多条件查询{entity}
请求方式:POST
请求地址:/bosfoundationservice/{appKey}/prototype/query/{entity}?noRelation={noRelation}
1.1. 请求参数:
Headers:
参数名 | 类型 | 示例 | 是否必填 | 参数含义 |
---|---|---|---|---|
Authorization | string | c4570cb9ca324bc8ba7dd9d1967710ea | 是 | access_token |
PathParas:
参数名 | 类型 | 示例 | 是否必填 | 参数含义 |
---|---|---|---|---|
entity | string | folders | 是 | 对象类类名 |
SearchParas:
参数名 | 类型 | 示例 | 是否必填 | 参数含义 |
---|---|---|---|---|
noRelation | boolean | true/false | 是 | true表示不返回关联关系,false表示返回所有关联关系 |
page | number | 1 | 是 | 指定当前查询第几页,从1开始 |
per_page | number | 5 | 是 | 每页的记录数 |
sortby | string | order | 是 | 指定返回结果按照哪个属性排序 |
order | string | asc | 是 | 排序顺序,asc升序,desc降序 |
Body:
application/json:
{
"condition": [
{
"field": "name", // 查询字段
"operator": "like", // 匹配规则 精确查询,模糊查询等等
"value": "zhao", // 值
"number": "false", //比较时将内容转化为数字后再比较
"logic": " " // 条件连接,若只有一条查询条件则为空。值可为Or,And。
}
],
"nestOr": [
{
"field": "name",
"operator": "==",
"value": "file1",
"number": "false"
},
{
"nestAnd": [
{
"field": "name",
...
},
{...}
]
}
],
"select": [
"name" // 指定返回字段,若未指定,返回实体所有内容。
]
}
1.2. 参数说明:
参数名 | 类型 | 示例 | 是否必填 | 参数含义 |
---|---|---|---|---|
field | string | xxx | 否 | 查询字段 |
operator | string | like | 否 | 匹配规则 精确查询,模糊查询 |
value | string | zhao | 否 | 值 |
number | Boolean | false | 否 | 比较时将内容转化为数字后再比较 |
logic | string | Or,And | 否 | 条件连接,若只有一条查询条件则为空。值可为Or,And。 |
1.3. 正确返回:
Http Status Code:200
{
"code": "SUCCESS",
"message": "请求处理成功",
"data": {
"count": 100,//总记录数
"data": [
{} //返回数据内容。
…
]
}
}
1.4. 状态码:
状态码 | code | message | data | 原因 |
---|---|---|---|---|
200 | BOSCLASS_NA | 不适用于{entity}类型实例数据 | NULL | 当对relationship类型操作时 |
200 | JSON_FORMAT_WRONG | Json格式错误 | NULL | 当传入Body格式错误时 |
200 | ENTITY_BOSCLASS_NOTFOUND | 实体类{entity}不存在 | NULL | 当传入entity错误时 |
200 | ENTITY_QUERY_NUMBER_SETTING_CONFLICT | 不可同时设置number为true、operator为非数字运算符{operator} | NULL | 如condition或nestAnd/nestOr参数中number值为true |
200 | ENTITY_QUERY_NUMBER_CONVERT_WRONG | value参数值{value }非数字 | NULL | 如codition或nestAnd/nestOr参数中number值为true |
200 | ENTITY_QUERY_NUMBER_SETTING_INVALID | 如condition或nestAnd/nestOr参数中number值为true | NULL | value参数值{value }非数字 |
200 | ENTITY_QUERY_PAGE_SETTING_INVALID | page参数值{page}非数字 | NULL | 查询参数page值为数字以外的值时 |
200 | ENTITY_QUERY_PERPAGE_SETTING_INVALID | per_page参数值{per_page}非数字 | NULL | 查询参数per_page值为数字以外的值时 |
200 | ENTITY_QUERY_ORDER_SETTING_INVALID | order参数值{order}无效 | NULL | 查询参数order值为asc或desc以外的值时 |
200 | ENTITY_QUERY_GROUPING_COLLECT_REQUIRED | grouping中collect属性必填 | NULL | 当grouping不为空时,如果grouping下的collect为空时 |
200 | ENTITY_QUERY_KEEP_COLLECT_MUTEX | grouping中keep不能包含collect字段 | NULL | 当grouping不为空时,keep中有collect字段时 |
200 | ENTITY_QUERY_AGGREGATE_MUSTIN_KEEP | 聚合字段必须在keep中保留 | NULL | 当grouping不为空时,aggregate中字段未在keep中定义时 |
200 | ENTITY_QUERY_SELECT_ERROR | select字段必须在collect、count、aggregate中定义 | NULL | 当grouping不为空时,select内容不是collect、count、aggregate字段或keep时 |
200 | ENTITY_QUERY_UNKNOWN_AGGREGATE | 未知的聚合函数 {xxx} | NULL | 当grouping不为空时,aggregate存在未定义的聚合方法时 |
200 | ENTITY_QUERY_SORTBY_ERROR | sortby字段必须在collect、count、aggregate中定义 | NULL | 当grouping不为空时,sortby字段不是collect、count、aggregate字段时 |
200 | ENTITY_QUERY_FIELD_NOTDECLARE | 分组聚合查询字段{field}必须在collect、count、aggregate | NULL | 当grouping不为空时,且grouping中condition、nestAnd、nestOr查询的field不是collect、count、aggregate字段时 |
200 | ENTITY_QUERY_KEEPFIELD_NOTDECLARE | 分组聚合查询keep字段{xxx}未定义 | NULL | 当grouping不为空时,当select中keep.xxx的field{xxx}不是keep中定义字段时 |
200 | CLASS_READPERMISSION_REQUIRED | 缺少实体类{bosclass}的读权限 | NULL | 当实体启用了类权限,但当前用户没有类的读权限时 |
1.5. 注意事项:
1、对象类指数据模型中配置的对象类。
2、满足一般entity的查询要求。
3、目前不支持value值为数组的查询。
4、operator仅支持==,!=,<,<=,>,>=,lik,regex, in, notIn,isNull,notNull 操作: ==:等于 !=:不等于 <:小于 <=:小于等于
>:大于
>=:大于等于
like:模糊查询,如当field为name,value为AAA时,则查找name属性中值包含AAA的实体对象。
regex:正则表达式,如 ^a 表示查询以a开头的实体。
in: 数组中是否包含值,如field为name,value为["A","B","C"],则查找name的值是"A"、"B"、"C"的实体对象
notIn: 数组中是否不包含值,如field为name,value为["A","B","C"],则查找name的值不是"A"、"B"、"C"的实体对象
isNull: 为空,如field为name,则查找name的值为空或者name属性不存在的实体对象
notNull: 不为空,如field为name,则查找name的值不为空的实体对象
5、查询某一个实体对象信息时,返回的body由parameter和relationship两部分构成。在body中可传入select参数, 则返回的parameter中属性字段即为select参数中指定字段,若未传入select参数或者select参数为空,则返回整个实体信息。若noRelation为true,返回值中没有parameter属性;relationship中为用户有权限读取的与此实体对象关联的所有一级关系。
6、condition参数中number可不传入,如传入且值为true则operator值不可为like,且比较时将数据转换为数字后再比较;如number值为false、空或number不传入,则进行字符串比较。
7、当noRelation为false时,仅返回用户有权限获取的关联关系。
8、noRelation如若未传默认值为false,如若参数值非法按默认值为false处理。
9、查询结果需根据accessToken的用户信息进行权限校验和过滤,最小需要读的权限。
10、实体对象查询范围为entity对应数据表中所有数据(基类和子类的实例数据)。
11、condition参数中当有多个搜索条件时,每个条件的logic表示与前一个条件的逻辑关系;第一个搜索条件的logic默认按"AND"处理,对第一个搜索条件的logic设置无需调整。多个条件的连接优先级为OR优先于AND,即当OR、AND同时存在于搜索条件中时,先进行OR连接,再进行AND连接。
12、condition、nestAnd、nestOr非必填,如三者都未传,则返回所有结果。
13、nestAnd、nestOr可以嵌套在任意一个对象的查询条件中,nestAnd表示其内部的查询条件之间为and与关系,nestOr表示其内部的查询条件之间为or或关系。
14、不建议condition与nestAnd/nestOr混用;一般情况简单的查询条件可使用condition,当多个查询条件需要进行and、or的复杂组合时建议使用nestAnd和nestOr。
15、返回count为符合查询条件的结果中用户有读权限的记录总数。
16、查询结果按照sortby字段的order顺序进行排序。sortby不传或为非对象字段时则查询结果不排序。
17、按照参数page和per_page获取用户有读取权限的数据:page>0,per_page>0 则data部分返回第page页数据(如无数据则为空数组),count值为总记录数;page<=0或为空,per_page>0 则data部分返回第一页数据(如无数据则为空数组),count值为总记录数;per_page<=0则data为空数组,count值为总记录数;per_page不传则data部分返回所有数据(如无数据则为空数组),count值为总记录数。
18、当查询条件或返回内容中需使用对象的惟一标识key时,写法为:_key。
19、当查询tags,条件有modelKey或componentKey时,关联tagModelRels查询。
20、当使用grouping分组查询时,返回字段select内容必须是collect、count、aggregate的字段或keep字段、以keep.开头的字段。
21、当使用grouping分组查询时,如果select不传或为空,则返回collect、count、aggregate的字段和keep。
22、当使用grouping分组查询时,keep为JSON数组,内容是JSON对象,如果select字段为keep.xx,则返回该分组中xx字段所有值的数组形式。
23、当使用grouping分组查询时,聚合函数支持MAX、MIN、SUM、AVERAGE四种,分别取分组中最大值、最小值、总和、平均值。
24、当实体类entity启用了类权限时,需要当前用户对该实体类拥有读权限。
考虑到模糊查询的功能, 建议请求的值按照下表进行处理。
特别字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$ 。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \) 。 |
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \* 。 |
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+ 。 |
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。 |
[ | 标记一个中括号表达式的开始。要匹配 [ ,请使用 \[ 。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \? 。 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n' 。'\n' 匹配换行符。序列 '\\' 匹配 "\" ,而 '\(' 则匹配 "(" 。 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^ 。 |
{ | 标记限定符表达式的开始。要匹配 { ,请使用 { 。 |
l | 指明两项之间的一个选择。要匹配 l ,请使用 l 。 |