数据保存接口设置
表和字段维护完成后,就可以在后台看到完整的表单了。但是表单还需要接口才能获取数据和编辑数据。
众所周知,接口分为两种,查询类和保存类型。
对于查询类接口来说,通过表api_query_api_infos进行配置;对于保存类型的接口,通过api_exec_api_infos接口进行配置,两张表结构差不多,但是根据查询和保存类型的不同,稍有区别。
接口URL形式
URL请求get和post均可,但是如果要上传数据,那么只能用POST提交数据,post提交数据的格式如下:
[
{"data-key1:"data-value"},
{"data-key2:"data-value"},
]
接口是标准的json接口,遵循1增2删3改4查,接口的URL形式如下:
# 新增接口
/api/1/<api_name>
# 删除接口
/api/2/<api_name>
# 更新接口
/api/3/<api_name>
# 查询接口
/api/4/<api_name>
接口权限设置
接口的权限相对于前台页面来说稍显复杂,前台页面只需要控制是否允许访问,所以只需要在menus.role_list中以逗号的形式罗列所有允许访问的角色即可。但是对于接口来说,拥有增删改查四个接口。所以接口的权限配置字符串如:
1:1;2:1;3:1;4:1
解释:通过英文分号,权限字符串分成了四个部分,增删改查(对应1、2、3、4),每个操作后面跟随的分号后是角色ID,多个角色ID使用逗号隔开。表示这些角色允许访问,为了表示该接口是开放的,可以用e来代表所有角色允许访问。
注意:对于前台页面来说,无授权(为空)代表所有儿女允许访问;但是对于后台来说,无授权则是禁止访问,如果没有配置权限字符串,则代表任何角色都没有权限访问该接口。
前台网页的配置使用menus.role_list中的权限,接口表里面的user_role不生效;接口类权限使用接口表的user_role控制。
查询类接口返回的数据格式
下面是查询类接口返回的数据,error
指的是接口状态,message
代表错误的具体内容,data_size
翻页页数,data_count
所有数据总数, page_count
每页显示的数量,data
指的是 查询接口表api_query_api_infos.data_name
=data的数据。该字段中配置的其他data_name结果展示在data_extra
中,每个节点就是data_name
的值。
{
"errno": 200,
"message": "",
"data_size": 1,
"data_count": 0,
"page_count": 40,
"data": [
{
"api_id": "",
"cat_name": "通用框架",
"create_time": "2023-07-03 21:17:47",
"edit_url": "/mnews/info/single/data-2040.html",
"id": 2040,
"image": [],
"table_id": 0,
"title": "hardmall框架简介",
"update_time": "2023-07-03 13:17:47",
"user_id": 2
}
],
"data_extra": {
"data": [
{
"api_id": "",
"cat_name": "通用框架",
"create_time": "2023-07-03 21:17:47",
"edit_url": "/mnews/info/single/data-2040.html",
"id": 2040,
"image": [],
"table_id": 0,
"title": "hardmall框架简介",
"update_time": "2023-07-03 13:17:47",
"user_id": 2
}
],
"info": [
{
"name":"张三"
}
]
}
}
查询接口(api_query_api_infos)
查询接口表结构配置如下:
使用query_text
中的sql进行查询,条件使用where
中的配置,如果有复杂的配置需要在query_text
中配置形式如 #where:config
的格式用来关联表 api_condition_wheres
中的条件。在3.0.59
版本中增加了order_by
字段用于专门处理排序的问题,query_text
中使用#orderby
来确定order by 语句的插入位置:
一个完整的query_text配置格式如:
select * from table #where:blog #orderby
key_replace 的配置格式如下:
name,age=:nianling
value_replate_id主要用于字典或者二级查询的情况,具体见表api_value_replace_maps
下面是查询接口的字段解释:
字段名称 | 中文名称 | 说明 |
---|---|---|
id | 主键 | |
service_name | 页面名称、接口名称 | 对于前台页面来说,service_name=model_name,比如填写index则表示 首页渲染模板需要的数据。对于后台接口来说,则为接口名称。sercie_name不唯一,表示一个接口或者页面可以有多条数据。 |
user_role | 用户权限 | 改配置仅对接口起作用,前台页面的控制通过menus.role_list起作用。表示方法如4:e。4表示接口类型是查询,e表示开放接口,任何人都可以查询。详见上面介绍的接口权限设置。 |
service_desc | 接口描述 | 开发用来用来解释接口的用途 |
data_name | 数据名称 | 详见 数据接口返回的解释 |
query_text | 查询SQL | 使用SQL生成接口,SQL在此处配置 |
condition_column_name | 键替换 | 对于某些接口中的key,与数据库中的列名称不同,可以通过设置这个来替换,相当于sql中的as,详见条件表配置 |
order_by | 排序 | sql查询中的order by字段替换 |
value_replate_id | 值替换 | 对于某些接口来说,查询结果中的值有可能是字典,也有可能是二级查询,可以在此处设置替换。 |
查询接口条件配置 (api_condition_wheres)
查询接口中,对于固定接口的where可以直接写在sql语句中,where条件配置在where字段中即可使用;但是对于某些接口来说,存在条件字段可传可不传的情况,所以就需要该表来管理where条件。在上个表的query_text
中配置where的高级模式#where:where_name
的形式来触发高级查询。
字段名称 | 中文名名称 | 说明 |
---|---|---|
id | 主键 | |
group_name | 查询条件组名称 | 对应查询语句中的条件字符串。#where:config 其中config就是group_name |
key_name | 数据库字段名称 | 如SQL中 where key = "18" 中的key |
calculate | 计算方法 | 比如 =,<,>=,like等,不支持between,用>=和<=代替 |
value_place_holder | 用户提交数据等Key | 比如用户提交数据{"name":"sexbao.net"},那么name就是 value_place_holder |
key_type | 用户提交数据的格式 | 格式化一些特殊数据,比如时间,填写 time。 |
fixed_value | 固定值 | 对于某些接口来说,查询条件是固定的,在此处填写。 |
值替换功能(api_value_replace_maps)
有些sql查询结果中,需要对结果的值进行替换,一种情况是字典,比如 sex=1代表男,sex=2代表女,实际返回的数据中需要男女,而不是数字,那么就需要值替换。
value_type=string,
key_name=sex,
query_text=select sex,value from table
另外一种情况是 查询结果中的值需要进一步被描述,最终体现在json中变成{}
或者[]
。
比如在角色列表中,一个角色可能有多个权限,role_list=1,想通过role_list字段把所有的权限都列出来,形成如下json:
{
"id":1,
"name":"管理员",
"role_list":[
{
"name":"XX区主任",
"type":"manager"
},
{
"name":"院长助理",
"type":"member"
}
]
}
应当配置如下:
value_type=array,
key_name=role_list,
query_text=select role_list,value from table