【课堂笔记】PHP开发APP接口(三)
错误码
错误码是用来描述当前接口处理的结果,是前后端共同的一个约束。两端都共同遵守的规矩。
{
"code": 0, // 错误码
"msg": "错误码的描述"
}
使用数组管理错误码
一般错误码都定义在一个类的常量里,使用数组定义:
const SUCCESS = [0, 'Success'];
const UNKNOWN_ERR = [1, '未知错误'];
const ERR_URL = [2, '访问接口不存在'];
// const 常量名 = [错误码, '错误码描述']
使用一个错误码类统一管理
创建文件err.class.php
// 定义错误码以及错误码的描述 统一的地方维护code和msg的关系
/**
* API通用错误码
*/
class ApiErrDesc
{
/**
* error_code < 1000
* 1000以内是代码内部错误,还没到业务层面的错误
*/
const SUCCESS = [0, 'Success'];
const UNKNOWN_ERR = [1, '未知错误'];
const ERR_URL = [2, '访问接口不存在'];
// 从100开始定义一些参数级别的错误
const ERR_PARAMS = [100, '参数错误'];
/**
* error_code 1001 - 1100 用户登录相关的错误码
*/
const ERR_PASSWORD = [1001, '密码错误'];
}
使用的时候,直接使用类中的常量即可。
// 返回一个错误信息,使用trait中的方法
$this->jsonData(ApiErrDesc::ERR_PARAMS[0], ApiErrDesc::ERR_PARAMS[1])
捕获try-catch没有捕获的错误
try {
throw new Exception("抛出try-catch的异常");
} catch(exception $e) {
echo $e->getMessage() .PHP_EOL;
}
function customExceptionHandle($e) {
/* 里面可以使用判断抛出的异常
if ($e instanceof ApiException) {
# code...
}
*/
echo $e->getMessage() .PHP_EOL;
}
// 只要不是try catch的异常都会被这个函数捕捉到
// set_exception_handler可以处理没有被try-catch捕获的异常
set_exception_handler("customExceptionHandle");
// 使用的时候直接抛出异常即可,set_exception_handler就可以捕捉到
throw new Exception("不是try-catch都可以捕捉到");
通过这种方式,注册了这个函数,直接抛出静态的错误码即可。当日也要提前定义个api异常类继承了主异常类。
class ApiExcept extends Exception
{
public function __construct(array $apiErrConst, Throwable $previous = null)
{
$code = $apiErrConst[0];
$message = $apiErrConst[1];
// 通过构造函数吧code和message传递进去
parent::__construct($message, $code, $previous);
}
}
使用直接传入一个数组:
throw new ApiException(ApiErrDesc::ERR_PARAMS)
一般用户表的设计
-- 一般用户表设计
create Table userT (
id bigint unsigned not null auto_increment 自增主键
name varchar(255) character set utf8mb4 collate utf8mb4_unicode_ci not null
sex tinyint(4) not null
email varchar(255)
password varchar(255) character set utf8mb4 collate utf8mb4_unicode_ci not null
create_at 记录创建的时间 timestamp null default null
update_at 记录最后更新的时间 timestamp null default null
primary key(id)
unique ke email 建立索引
当数据量大的时候就要建索引
);
这里没有用到盐值,对于密码验证,使用PHP原生自带的password_hash()与password_verify()即可。