[Laravel] 13 - WEB API : update & error tracking
前言
一、大纲
Ref: https://www.imooc.com/video/3134
- 版本升级分析以及数据表设计
- 版本升级分析
- 掌握如何设计版本升级数据表
- 版本升级接口开发以及APP演示
二、数据表设计
初始化接口init.php参数 | |
app_id | 客户端id 1, 安卓pad |
version_id | 版本号 |
/** * version_upgrade 版本升级信息表 */ CREATE TABLE `version_upgrade` ( `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT, `app_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '客户端设备id 1安卓pad 2安卓手机 3ios手机 4iospad', `version_id` smallint(4) unsigned DEFAULT '0' COMMENT '大版本号id', `version_mini` mediumint(8) unsigned DEFAULT '0' COMMENT '小版本号', `version_code` varchar(10) DEFAULT NULL COMMENT '版本标识 1.2', `type` tinyint(2) unsigned DEFAULT NULL COMMENT '是否升级 1升级,0不升级,2强制升级', `apk_url` varchar(255) DEFAULT NULL, `upgrade_point` varchar(255) DEFAULT NULL COMMENT '升级提示', `status` tinyint(2) DEFAULT NULL, `create_time` int(11) DEFAULT NULL, `update_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
/** * app表 客户端表 */ CREATE TABLE `app` ( `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `name` varchar(10) DEFAULT NULL COMMENT 'APP类型名称 如 : 安卓手机', `is_encryption` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否加密 1加密 0不加密', `key` varchar(20) NOT NULL DEFAULT '0' COMMENT '加密key', `image_size` text COMMENT '按json_encode存储', `create_time` int(11) NOT NULL COMMENT '创建时间', `update_time` int(11) NOT NULL COMMENT '更新时间', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1正常 0删除', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
开发首页接口方法
一、数据表
- 客户端 返回 服务器的内容
- 客户端 返回 服务器的方式
不建议使用第一个。header倒是不错。
二、公共类
- common.php
该类之后被init.php使用。
<?php /** * 处理接口公共业务 */ require_once('./response.php'); require_once('./db.php');
class Common { public $params; # 是个map public $app;
public function check() {
# 有则加入params数组,没则赋值为空 $this->params['app_id'] = $appId = isset($_POST['app_id']) ? $_POST['app_id'] : ''; $this->params['version_id'] = $versionId = isset($_POST['version_id']) ? $_POST['version_id'] : ''; $this->params['version_mini'] = $versionMini = isset($_POST['version_mini']) ? $_POST['version_mini'] : ''; $this->params['did'] = $did = isset($_POST['did']) ? $_POST['did'] : ''; $this->params['encrypt_did'] = $encryptDid = isset($_POST['encrypt_did']) ? $_POST['encrypt_did'] : ''; if(!is_numeric($appId) || !is_numeric($versionId)) { return Response::show(401, '参数不合法'); }
Goto: 测试一
--------------------------------------------------------------------------------- // 先判断app的自带信息 $this->app = $this->getApp($appId); if(!$this->app) { return Response::show(402, 'app_id不存在'); }
// 再判断app是否需要加密 if($this->app['is_encryption'] && $encryptDid != md5($did . $this->app['key'])) { return Response::show(403, '没有该权限'); } }
===================================================================================== public function getApp($id) { $sql = "select * from `app` where id = " . $id ." and status = 1 limit 1"; $connect = Db::getInstance()->connect(); $result = mysql_query($sql, $connect);
# 返回结果集 return mysql_fetch_assoc($result); }
===================================================================================== # 版本信息更新 public function getversionUpgrade($appId) { $sql = "select * from `version_upgrade` where app_id = " . $appId ." and status = 1 limit 1"; $connect = Db::getInstance()->connect(); $result = mysql_query($sql, $connect); return mysql_fetch_assoc($result); } /** * 根据图片大小组装相应图片 * @param string $imageUrl * @param string $size */ public function setImage($imageUrl, $size) { if(!$imageUrl) { return ''; } if(!$size) { return $imageUrl; } $type = substr($imageUrl, strrpos($imageUrl, '.')); if(!$type) { return ''; } $path = substr($imageUrl, 0, strrpos($imageUrl, '.')); return $path . '_' . $size . $type; } }
- 测试一
在此测试了check函数。
<?php require_once('./common.php'); class Init extends Common { public function index() { $this->check(); } }
---------------------------- $init = new Init(); $init->index();
三、版本升级
<?php require_once('./common.php');
class Init extends Common {
public function index() {
$this->check();
// 获取版本升级信息 $versionUpgrade = $this->getversionUpgrade($this->app['id']);
if($versionUpgrade) {
# 升级过程中,也要更改相关信息,比如升级完毕后就不再需要升级提示咯 if($versionUpgrade['type'] && $this->params['version_id'] < $versionUpgrade['version_id']) { $versionUpgrade['is_upload'] = $versionUpgrade['type']; }else { $versionUpgrade['is_upload'] = 0; }
return Response::show(200, '版本升级信息获取成功', $versionUpgrade);
} else {
return Response::show(400, '版本升级信息获取失败'); } } }
------------------------------------------------------------------------- $init = new Init(); $init->index();
错误日志接口
一、错误日志记录
<?php require_once('./common.php');
class ErrorLog extends Common { public function index() { $this->check(); $errorLog = isset($_POST['error_log']) ? $_POST['error_log'] : ''; if(!$errorLog) { return Response::show(401, '日志为空'); } $sql = "insert into error_log( `app_id`, `did`, `version_id`, `version_mini`, `error_log`, `create_time`) values( ".$this->params['app_id'].", '".$this->params['did']."', ".$this->params['version_id'].", ".$this->params['version_mini'].", '".$errorLog."', ".time()." )";
$connect = Db::getInstance()->connect(); if(mysql_query($sql, $connect)) { return Response::show(200, '错误信息插入成功'); } else { return Response::show(400, '错误信息插入失败'); } } }
--------------------------------------------------------------------------- $error = new ErrorLog(); $error->index();