grape动态PHP结构(三)——API接口

时间:2022-12-09 21:40:24

一、app视图与控制器

aaarticlea/png;base64,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" alt="" />

1)路由

这里的v1、v2就是模块,由于客户端版本一直在迭代的,那么一些老版本的客户端调用的接口就得保留起来,使得兼容。新版本就直接调用新接口。

还有一种是写html页面,在客户端展示,只要把template文件夹和data文件夹加上就可以了。

Controller的配置如下,注意ismodule是true,module_list中的array:

$InitPHP_conf['ismodule'] = true; //开启module方式
$InitPHP_conf['controller']['path'] = 'controller';
$InitPHP_conf['controller']['controller_postfix'] = 'Controller'; //控制器文件后缀名
$InitPHP_conf['controller']['action_postfix'] = ''; //Action函数名称后缀
$InitPHP_conf['controller']['default_controller'] = 'index'; //默认执行的控制器名称
$InitPHP_conf['controller']['default_action'] = 'index'; //默认执行的Action函数
$InitPHP_conf['controller']['module_list'] = array('v1','v2'); //module白名单
$InitPHP_conf['controller']['default_module'] = 'v1'; //默认执行module
$InitPHP_conf['controller']['default_before_action'] = 'before'; //默认前置的ACTION名称
$InitPHP_conf['controller']['default_after_action'] = 'after'; //默认后置ACTION名称

这里顺便说下InitPHP的路由管理。InitPHP的框架URL路由分为三种形式,原生、path模式、rewrite模式,HTML模式。我这边用的是rewrite模式。

1.原生模式:index.php?c=index&a=run

2.rewrite模式:/index/run/id=1 (需要开启服务器rewrite模块,并且配置.htaccess)

3.path模式:/index/run/id/1 (需要开启服务器rewrite模块,并且配置.htaccess)

4.html模式: user-index-run.htm?uid=100 (需要开启服务器rewrite模块,并且配置.htaccess)

2)模拟session

这里模拟的方法比较简单而粗暴。

在登录的时候,会生成一串字符,然后保存到用户表中,这串字符会返回给客户端,作为session。

在登录后客户端会将这串字符传过来,服务器再根据这串字符在搜索用户,从未获取用户信息,并判断是否已经登录。

二、apiController通用控制器类

public function __construct() {
parent::__construct(); $this->controller_name = $this->getC();
$this->action_name = $this->getA();
$this->module_name = $this->getM(); //访问参数日志记录
$this->_logVisit(); //API统一接口为post提交
if (!$this->controller->is_post()) {
$this->output(constHelper::API_STATUS_NEED_POST, '必须为POST请求');
} /**
* 请求参数示例
* __ua=Android 4.4.4//MI 3W//26//2.0//865645022129866//////WIFI&
* __timestamp=1441854121116&
* mobile=13800138000&
* __version=2.0&
* __device=android&type=2&
* __key=67543fd413ce4d281fc93306597acb66
*/
$device = $this->p('__device'); //客户端名称
$timestamp = $this->p('__timestamp'); //客户端时间戳
$key = $this->p('__key'); //客户端加密指纹
$session = $this->p('__session'); //客户端SESSION
$version = substr($this->p('__version'), 0, 5); //客户端版本 //客户端最低版本号要求
if (strnatcmp($version, constHelper::MIN_VERSION_ALLOWED) < 0) { //客户端需要升级
$this->output(constHelper::API_STATUS_NEED_UPGRADE, '客户端需要升级');
} //检查密钥
$this->_checkSecretKey($device, $timestamp, $key); //判断是否需要验证登录
$needCheck = $this->_checkLogin();
if($needCheck && empty($session)) {
$this->output(constHelper::API_STATUS_NEED_LOGIN, '请先登录');
} //根据session获取用户信息
if(!empty($session)){
$memberModel = InitPHP::getMysqlDao('member');
$this->member = $memberModel->getMemberBySession($session);
} //session没有获取到相关信息 也要做跳转
if($needCheck && empty($this->member)) {
$this->output(constHelper::API_STATUS_NEED_LOGIN, '请先登录');
}
}

1)访问参数日志记录

当客户端发起一个请求的时候,会带上很多参数,例如操作系统、当前版本号、时间戳、口令、网络、应用市场等信息。

调用$this->_logVisit();将这些信息全部存到MongoDB中,便于以后调试与追踪。并且在返回参数的时候,将返回参数更新到这条请求记录中。

2)output返回参数

返回参数的格式如下:

 {
"code":1000,
"msg":"hello\u6210\u529f",
"data":{
"result":1,
"obj":{"id":"55f57a4aa0105"}
}
}

code:是各种通用的错误编码,我写在了libraray/helper/dict/constHelper中,如上面的代码所示,当验证出现错误的时候,会显示响应的code,并返回

msg:就是提示语言,这里做了Unicode编码

data:返回的就是各种自定义参数,这里仅列举了通用的两种

result:也是类似于code的定义,不同的是针对的是特定请求中的返回码

obj:返回的就是个自定义对象,也可以是数组

3)密钥匹配

为了保证请求的合法性,在客户端和服务器端约定一个密钥,客户端在根据这个密钥做加密后,传过来给服务器端,服务端再加密然后做匹配。

服务器端将密钥设置在defined文件中,IOS,Android可以定义的不同:

define('API_IOS_KEY', 'DF_A98=D^&7$^%*9CNAhj0UO!!LM11');
define('API_ANDROID_KEY', 'KU98&)dsf8%@kji89dfadJK-800i122');
define('API_UNKNOW_KEY', 'jfdsfd798hj+@(*kb66578-223q670933');

而验证的规则也很简单,时间戳+密钥再MD5加密:

private function _checkSecretKey($device, $timestamp, $key) {
//提取私有密钥
$privateKey = '';
switch (strtolower($device)) {
case 'ios':
$privateKey = API_IOS_KEY;
break;
case 'android':
$privateKey = API_ANDROID_KEY;
break;
default:
$privateKey = API_UNKNOW_KEY;
break;
} $keySource = $privateKey . $timestamp;
//客户端安全认证失效
if (empty($key) || ($key != md5($keySource))) {
$this->outputCom(constHelper::API_STATUS_AUTH_FAIL, '安全认证失败');
}
}

4)各种验证

1.第一个验证是只接收post请求,这里直接使用了InitPHP中的Request API

2.客户端最低版本号验证,有时候客户端需要强制升级

3.登录验证,这里有多种情况,有些API是不需要登录的,有些是需要登录的,而有些是既可以登录也可以不登录

三、API调试工具

在交付给客户端之前,自己肯定要先测试一下的,这就需要一个简易工具了,当然也可以选择一些强大的工具,例如firefox的httprequester等。

在tool文件夹下面,我已经把这个工具放在里面了,执行页面如下:

aaarticlea/png;base64,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" alt="" />

工具的文件目录也很淳朴,就五个文件,有两个地方需要配置:

aaarticlea/png;base64,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" alt="" />

1)在indexhtml中data-domain属性,修改为你当前的api域名,在第13行左右

aaarticlea/png;base64,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" alt="" />

2)在tk.php中,修改数据库连接参数,以及客户端密钥

aaarticlea/png;base64,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*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" alt="" />

GitHub地址:

https://github.com/pwstrick/grape