【课堂笔记】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()即可。
 
                     
                     
                     
                     
                     
                     
                     
             
             
             目录
        目录