[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 '' COMMENT '客户端设备id 1安卓pad 2安卓手机 3ios手机 4iospad',
`version_id` smallint(4) unsigned DEFAULT '' COMMENT '大版本号id',
`version_mini` mediumint(8) unsigned DEFAULT '' 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 '' COMMENT '是否加密 1加密 0不加密',
`key` varchar(20) NOT NULL DEFAULT '' 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 '' 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();
[Laravel] 13 - WEB API : update & error tracking的更多相关文章
- [Laravel] 10 - WEB API : wrapper
前言 一.常用的解决方案 React 前端 + PHP (Laravel) 后端 Such as "some exposure to WEB API’s and/or RESTful“. 使 ...
- "Asp.Net Web Api MediaTypeFormatter Error for x-www-formurlencoded data" 解决方法
遇到标题中所说的问题原因是使用 jQuery AJAX 以 POST 方式调用 Asp.Net Web API .解决办法请看以下代码中有注释的部分. public static class WebA ...
- [Laravel] 11 - WEB API : cache & timer
前言 一.资源 Ref: https://www.imooc.com/video/2870 二.缓存 缓存:静态缓存.Memcache.redis缓存 Ref: [Laravel] 09 - Func ...
- [Laravel] 12 - WEB API : cache implement
前言 Ref: https://www.imooc.com/video/2873 服务端如何为客户端(app)的首页提供数据接口, 本篇用此作为例子演示接口的实现. 单例模式 一.三大原则 单例实现 ...
- [Laravel] 14 - REST API: Laravel from scratch
前言 一.基础 Ref: Build a REST API with Laravel API resources Goto: [Node.js] 08 - Web Server and REST AP ...
- ASP.NET Web API 应用教程(一) ——数据流使用
相信已经有很多文章来介绍ASP.Net Web API 技术,本系列文章主要介绍如何使用数据流,HTTPS,以及可扩展的Web API 方面的技术,系列文章主要有三篇内容. 主要内容如下: I 数据 ...
- Web API 数据流使用
ASP.NET Web API 应用教程(一) ——数据流使用 相信已经有很多文章来介绍ASP.Net Web API 技术,本系列文章主要介绍如何使用数据流,HTTPS,以及可扩展的Web AP ...
- ASP.NET Web API 2中的错误处理
前几天在webapi项目中遇到一个问题:Controller构造函数中抛出异常时全局过滤器捕获不到,于是网搜一把写下这篇博客作为总结. HttpResponseException 通常在WebAPI的 ...
- [转]Global exception handling in Web API 2.1 and NLog
本文转自:https://stackoverflow.com/questions/25865610/global-exception-handling-in-web-api-2-1-and-nlog ...
随机推荐
- GitHub Desktop的简单使用
- spring源码分析系列
spring源码分析系列 (1) spring拓展接口BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor spring源码分析系列 ...
- tcp连接状态查看
linux常用查看tcp状态工具netstat和ss,这两个工具查看时都有1个Recv-Q和Send-Q 解释如下: 对应处于Listen状态的套接字: Recv-Q表示已建立连接队列中连接个数(等待 ...
- 状态压缩+矩阵乘法hdu-4332-Constructing Chimney
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4332 题目意思: 用1*1*2的长方体构造一个中间为空的底面3*3的立体烟囱. 解题思路: 实际上就 ...
- 如何在本地搭建一个Android应用crashing跟踪系统-ACRA
https://github.com/bboyfeiyu/android-tech-frontier/tree/master/others/%E5%A6%82%E4%BD%95%E5%9C%A8%E6 ...
- pytorch中检测分割模型中图像预处理探究
Object Detection and Classification using R-CNNs 目标检测:数据增强(Numpy+Pytorch) - 主要探究检测分割模型数据增强操作有哪些? - 检 ...
- oracle-用户和表空间创建
windows下 创建临时表空间 create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle11i\user_te ...
- 如何用 async 控制流程
来自: http://larry850806.github.io/2016/05/31/async/ [Javascript] 如何用 async 控制流程 (一) 31 May 2016 async ...
- windows和linux文件输 - ftp
1. linux到linux的复制直接用scp命令 但是windows下就麻烦点, 安装winscp, 配置用户名和密码即可随意拖拽了. 下载地址: 需要linux电脑的用户名和密码即可 2. win ...
- linux一些稍微高级的命令
cut 命令:提取文件中指定的字段(列).字符内容.单词的默认分隔符为空格. cut [选项]... [文件]... 选项: -b 按照字节切 -c 按照字符切 -d 指定分割符 -f 指定 ...