开源协议:Apache License 2.0
M-API
概述
为了方便前端以及移动端接口的开发,将相应功能整合为一个可快速设置应用的Web API,从而加快项目开发的周期。M-API通过简单设置可将数据库选择性的暴露给调用方。当然,为了安全考虑,建议设置相应的操作权限。该文档适合有一定基础的PHPer。
M-API开发环境为:php-7.0.4, mysql-5.7.11。同时支持php5.6.0,其它版本未进行测试。
M-API运行环境需要开启mbstring;加密操作需要开启openssl;数据库操作需要开启pdo_mysql。
M-API支持密送和签名。目前只支持RSA加密。鉴于RSA的特性,当交互信息量较大时建议修改为仅加密处理敏感信息,其它信息采用对称加密;或将传输协议改为HTTPS。如果必须使用RSA,可将信息进行分段处理。
M-API支持get和post。
M-API数据库目前仅支持mysql。
M-API全部采用PDO预处理操作数据库。
M-API支持mysql字段有:char, varchar, tinyint, smallint, mediumint, int, bigint, decimal, text。
M-API支持同时多个数据库连接。同样,也支持同时多组基本设置调用。
M-API支持表级别和列级别的操作权限设置。
M-API可指定关联字段,以避免注入。
M-API支持自动数据有效性的验证。可手动指定正则验证。
M-API接收和传出数据均为json。
M-API不支持事务。请在业务逻辑中进行处理。
M-API不支持联结查询。请使用视图查询。
最终解释权归开发者所有。
未尽事宜,后续补充。
能力一般,水平有限。请多多包涵。
/class/basic.class.php――――――――基础类基本配置信息
/class/mysql.class.php――――――――数据库类mysql
/class/mysql.config.class.php――――――mysql配置类
/class/rsa.class.php――――――――――加密类rsa
/class/standard.class.php―――――――标准类常用函数
/pem/――――――――――――――――密钥
/index.php――――――――――――――对外接口入口
/showstruct.php―――――――――――快速显示数据库结构
需要配置以下文件
/class/basic.class.php
/class/mysql.config.class.php
/index.php
2.生产环境
需删除以下文件
/readme.docx
/showstruct.php
public static $_config =array(
'default'=> array(
'参数' => ‘值’
),
'自定义配置名'=> array(
'参数' => '值'
)
);
基本配置
参数
说明
值
display_errors
启用调试
true / false
rsa
启用rsa加密
true / false
cipher
启用密送
true / false
private_key_path
私钥文件的路径
'string' (该选项当ras为true时有效。当cipher为false时路径后自动增加子文件夹需传入文件夹名称)
public_key_path
公钥文件的路径
'string' (该选项当ras为true时有效。当cipher为false时路径后自动增加子文件夹需传入文件夹名称)
private_key_name
私钥文件名
'string' (该选项当ras为true时有效)
public_key_name
公钥文件名
'string' (该选项当ras为true时有效)
get
启用get
true / false(一般为false;当rsa为true时需为false)
参数
说明
值
db_type
数据库类型
mysql
db_host
服务器地址
'string'
db_port
端口
'int'
db_name
数据库名
'string'
db_user
用户名
'string'
db_pwd
密码
'string'
配置说明
可通过/showstruct.php快速生成。但生成后仍建议设置相应权限。
public static $_tables =array(
'0'=> array(
'0' => '表名1',
'参数' =>'值'
),
'1'=> array(
'0' => '表名2',
'参数' =>'值'
)
);
public static $_fields =array(
'0'=> array(
'0' => '字段名1',
'1' => '字段类型1',
'参数' =>'值'
),
'1'=> array(
'0' => '字段名2',
'1' => '字段类型2',
'参数' =>'值'
)
);
表权限配置
参数
说明
值
add
允许增加
true / false默认为true
del
允许删除
true / false默认为true
edit
允许修改
true / false默认为true
select
允许查询
true / false默认为true
字段权限配置
isuid
身份标识
当为身份标识时接口内部使用;每个表仅有一个字段需要设置该属性;禁止任何外部调用;edit和select设置失效。默认为false
edit
允许修改
true / false默认为true
select
允许查询
true / false默认为true
pattern
正则过滤
'string'正则表达式默认为空
根据$data['b']['i']做用户操作权限判断。
根据$data['b']['d']做用户操作时限判断。
根据$data['b']['t']做用户身份判断并赋值$_uid。
传入参数
参数
说明
值
data
传入值
'string' (加密/非加密) json
传出参数
参数
说明
值
state
执行状态
0未执行/ 1已执行
code
返回代码
参阅“code代码说明”
info
返回信息
'string' (加密/非加密) json
data名称/值列表(以javascript为例)
名称
说明
值
data[b]
基本内容
'array' (参下)
data[b][i]
身份标识
'string'必需
例:
var temp = 'id';
data[b][d]
时间戳
'int'必需
例:
var temp = 1461143961;
名称
说明
值
data[b][t]
令牌
'string' (身份id + MD5(登陆密码) +时间戳)
可选(没有该键的情况下默认为seeion验证)
例:
var temp = 'id49ba59abbe56e0571461143961';
data[c]
执行内容
'array' (参下)
data[c][][a]
操作类型
'int' (0增加, 1删除, 2修改, 3查询)必需
0返回增加id;1, 2返回影响行数;3返回具体array。
例:
var temp = 0;
data[c][][t]
操作的表
'int' (后台生成且允许相应操作)必需
例:
var temp = 1;
data[c][][V]
字段值
'array'操作类型为0, 2时必需
格式:'字段代号' : '字段值'
字段代号由后台生成且允许相应操作
例:
var temp = {
'1' : 'abc',
'2' : true,
'3' : 1,
};
data[c][][w]
条件
'array'操作类型为1, 2, 3时可选
格式:
1.条件关系
'logic' : '具体关系'
字段与字段的条件关系
or/ and默认为and
2.具体条件
i.'logic' : '具体关系'
字段内的条件关系
or/ and默认为and
ii.'字段代号' : {
'条件类型' : '条件值' *条件值有可能是'array'
}
字段代号由后台生成且允许相应操作
3.条件类型
等于:'eq' : '具体值'
不等于:'neq' : '具体值'
大于:'gt' : '具体值'
大于等于:'egt' : '具体值'
小于:'lt' : '具体值'
小于等于:'elt' : '具体值'
模糊查询:
'like' : '具体值'
'like' : 'arrayA'
arrayA:
'0' : 'arrayB',
'1' : '条件关系(or / and)'
arrayB:
'索引' : '具体值'
模糊查询(反):'notlike' : '具体值'
区间查询:
'between' : 'array'
array:
'0' : '起始值',
'1' : '结束值'
区间查询(反):'notbetween' : 'array' (同上)
IN查询:
'in' : 'array'
array:
'索引' : '具体值'
IN查询(反):'notin' : 'array' (同上)
例:
var temp = {
'logic' : 'or',
'1' : {
'logic' : 'and',
'eq' : '1',
'like' : {
'0' : {
'0' : '测%',
'1' : '试%'
},
'1' : 'or'
}
},
'2' : {
'eq' : '2'
}
};
data[c][][s]
显示字段
'string'操作类型为3时必需
格式:'字段代号1,字段代号2,字段代号3,……'
字段代号由后台生成且允许相应操作
例:
var temp = ['1', '2', '3', '5'];
data[c][][o]
排序
'array'操作类型为3时可选
格式:'字段代号' : '排序方式'
排序方式:'' / desc默认为空(升序)
字段代号由后台生成且允许相应操作
例:
var temp = {
'1' : '',
'2' : 'desc'
};
data[c][][l]
起始和数量
'string'操作类型为3时可选
格式:'起始,数量'
例:
var temp = ['1', '5'];
代码说明
代码
说明
0000
正常
A001
php需要mbstring扩展支持
A002
拒绝访问错误身份
C000
配置文件调试模式错误
C001
配置文件获取数据模式错误
C002
配置文件私钥文件的路径错误
C003
配置文件公钥文件的路径错误
C004
配置文件私钥文件名错误
C005
配置文件公钥文件名错误
C006
配置文件密送方式错误
C007
配置文件加密开关错误
代码
说明
C008
配置文件数据库参数错误
C009
配置文件数据库类型错误
C010
mysql基本设置表允许增加开关设置错误
C011
mysql基本设置表允许删除开关设置错误
C012
mysql基本设置表允许修改开关设置错误
C013
mysql基本设置表允许查询开关设置错误
C014
mysql基本设置字段允许修改开关设置错误
C015
mysql基本设置字段允许查询开关设置错误
C016
mysql基本设置字段身份标识开关设置错误
D001
php需要pdo_mysql扩展支持
D002
数据库连接错误
D003
sql执行错误
E001
php需要openssl扩展支持
E002
私钥文件不存在
E003
私钥不可用
E004
公钥文件不存在
E005
公钥不可用
E006
加密出错
E007
解密出错
E008
私钥路径错误
E009
公钥路径错误
代码
说明
G001
缺少传入参数data[b]
G002
缺少传入参数data[b][i]
G003
传入值错误data[b][i]
G004
缺少传入参数data[b][d]
G005
传入值错误data[b][d]
G006
缺少传入参数data[c]
G007
缺少传入参数data[c][][a]
G008
传入值错误data[c][][a]
G009
缺少传入参数data[c][][t]
G010
传入值错误data[c][][t]
G011
传入参数不允许增加操作data[c][][t]
G012
传入参数不允许删除操作data[c][][t]
G013
传入参数不允许修改操作data[c][][t]
G014
传入参数不允许查询操作data[c][][t]
G015
缺少传入参数data[c][][v]
G016
传入参数不允许更改操作data[c][][v][]
G017
传入参数错误data[c][][v][]
G018
传入值不允许为空data[c][][v][]
G019
传入值类型错误data[c][][v][]
G020
传入值超出范围data[c][][v][]
G021
传入值格式错误data[c][][v][]
代码
说明
G022
传入参数不允许任何操作data[c][][v][]
G023
传入参数不允许任何操作data[c][][w][]
G024
传入参数错误data[c][][w][]
G025
传入参数错误data[c][][w][][]
G026
缺少传入参数data[c][][s]
G027
传入值错误data[c][][s]
G028
传入值不允许任何操作data[c][][s]
G029
传入值不允许查询操作data[c][][s]
G030
传入参数错误data[c][][o][]
G031
传入参数不允许任何操作data[c][][o][]
G032
传入值错误data[c][][o][]
G033
该值仅允许输入两个参数data[c][][l]
G034
传入值错误data[c][][l][]