数据保存接口设置

表和字段维护完成后,就可以在后台看到完整的表单了。但是表单还需要接口才能获取数据和编辑数据。

众所周知,接口分为两种,查询类和保存类型。

对于查询类接口来说,通过表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