[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();

 

posted @ 2018-07-10 08:38  郝壹贰叁  阅读(292)  评论(0编辑  收藏  举报